迁移到dbcontext LINQ where子句字符串参数

时间:2015-09-30 14:31:40

标签: c# linq where-clause dbcontext

我将我的项目从ObjectContext迁移到DbContext,我对这句话有疑问:

var query = db.Inventory.Where("it.IdState in {" + states + "}");

这适用于ObjectContext,但现在我在编译时遇到错误:

Error   CS1503  Argument 2: cannot convert from 'string' to 'System.Linq.Expressions.Expression<System.Func<Test.DAL.Inventory, bool>>' 

现在似乎无法做到这一点,我试图公开ObjectContext来做到这一点,但我无法找到方法

有什么想法吗? 谢谢!

4 个答案:

答案 0 :(得分:6)

您可以(并且应该)强烈地将这些参数键入为表达式。

var query = db.Inventory.Where(x => states.Contains(x.IdState));

答案 1 :(得分:3)

你需要扭转它

var query = db.Inventory.Where(it => states.Contains(it.IdState));

答案 2 :(得分:3)

.Where方法语法不能以您拥有的方式使用。请使用以下

var q = db.Inventory.Where(i => states.Contains(i.IdState));

检查下面的'fruit'示例,以便更好地了解.Where子句的使用方式

https://msdn.microsoft.com/en-us/library/vstudio/bb534803(v=vs.100).aspx

<强>资源:

Query Syntax and Method Syntax in LINQ (C#)

答案 3 :(得分:2)

Where的参数必须是制定条件的委托。取代

"it.IdState in {" + states + "}"

it => states.Contains(it.IdState)

使用lambda表达式解决问题。