3

我正在尝试使用 Contains 方法通过动态 LINQ 运行 IN 语句。使用以下代码时,它运行得很好:

var statuses = new List<string> { "Active" };
result = result.Where("@0.Contains(Status)", statuses.ToArray());

但是当我把它切换到一个整数数组时,我得到一个错误:

var years = new List<int> { 2012 };
result = result.Where("@0.Contains(Year)", years.ToArray());

这是我使用后者收到的错误:

“Int32”类型中不存在适用的方法“包含”

有没有办法做到这一点而不必使用多个 OR 语句来绕过使用 IN 语句?

这些正在查找的数据库中的字段是可为空的字段。这是造成问题的原因吗?我把它从int切换到int?它仍然显示相同的错误。有什么建议么?

4

4 回答 4

2

好吧,经过一些研究,Contains 似乎不能“开箱即用”。当您说您的第一个查询有效时,我真的很惊讶。我试过了,和“Int32”有同样的错误。

您可能会在这里找到解决方法:

http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-contains-extension-.html

您需要自己修改 System.Linq.Dynamic 库,或者在这里下载示例项目: http ://walteralmeida.typepad.com/files/dynamiclinqextension.zip

但是这篇文章现在可能已经过时了(不知道 System.Linq.Dynamic 自 20109 年以来的演变。

于 2012-07-02T13:00:13.240 回答
1

由于您使用 .Contains 的方式,代码失败了。试试这个:

var years = new List<int> { 1, 2, 3, 4 };
var result = result.Where(element => years.Contains(element));

很抱歉没有认识到您需要在 Dynamic Linq 中工作。据我了解,Dynamic Linq 默认不支持包含,但可以扩展库以支持它。请查看 Walter Almedia 的此链接,该链接解释了如何扩展库:Extended DynamicLINQ to Support Contains

于 2012-07-02T12:43:58.540 回答
0
var statuses = new string[] { "Active" };
result = result.Where(r => statuses.Contains(r.Status));
于 2012-07-02T13:03:22.200 回答
0

你必须使用如下,

var resultset = from x in years
                where x == yearTobeSelected
                select x;

或者您可以IEnumerable.Contains()通过代码中的列表来使用。

于 2012-07-02T12:35:43.567 回答