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

本文关键字:子句 字符串 参数 where LINQ dbcontext 迁移 | 更新日期: 2023-09-27 18:15:14

我正在将我的项目从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来做到这一点,但我找不到

的方法

任何想法?谢谢!

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

您可以(并且应该)将这些参数作为表达式强类型输入。

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

你需要把它倒过来

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

不能按照您的方式使用.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

资源:

LINQ (c#)中的查询语法和方法语法

Where的参数必须是一个指定条件的委托。替换

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

it => states.Contains(it.IdState)

使用lambda表达式解决问题。