如何在LINQ-to-Entities 3.5中执行"值在何处"
时间:2020-03-06 14:19:18 来源:igfitidea点击:
有人知道如何使用LINQ-to-Entities应用"值在何处"类型条件吗?我尝试了以下方法,但不起作用:
var values = new[] { "String1", "String2" }; // some string values var foo = model.entitySet.Where(e => values.Contains(e.Name));
我相信这在LINQ-to-SQL中有效吗?有什么想法吗?
解决方案
是的,它确实转换为SQL,它会生成一个标准的IN语句,如下所示:
选择[t0]。[col1]
来自[表格] [t0]
WHERE [col1] IN("值1","值2")
使用where方法始终无法正常工作
var results = from p in db.Products where p.Name == nameTextBox.Text select p;
更新:了解如何执行此操作。 EF将在数据库上生成适当的SQL。我不确定这是否仅适用于EF4,但我从Entity Framework 4.0食谱中获得了提示
var listOfIds=GetAListOfIds(); var context=CreateEntityFrameworkObjectContext(); var results = from item in context.Items where listOfIds.Contains(item.Category.Id) select item; //results contains the items with matching category Ids
此查询在服务器端生成正确的in子句。我尚未使用EF 3.5对其进行过测试,但它确实可以与EF4一起使用。
注意:传入in子句的值不是NOT参数,因此请确保我们验证输入。
遗憾的是,Linq to Entities不支持Contains。
IN和JOIN运算符不同(按IN进行过滤永远不会更改查询的基数)。
EF目前不支持包含。
供参考:
如果我们使用的是ESql,则可以在操作中使用。
我没有VS 2008,但代码应如下所示:
var ids = "12, 34, 35"; using (context = new Entites()) { var selectedProducts = context.CreateQuery<Products>( String.Format("select value p from [Entities].Products as p where p.productId in {{{0}}}", ids)).ToList(); ... }