2017-08-28 125 views
1

地狱!如何通过动态linq过滤数组/列表

我试着用Contains过滤所有已知的变化,但到目前为止没有运气。

方法#1

ret = ret.Where("CaseID.Contains(@0)", {15, 16, 17}) 

获取以下错误:

System.Linq.Dynamic.ParseException: 'No applicable method 'Contains' exists in type 'Int32?''

方法#2

ret.Where("@0.Contains(outerIt.CaseID)", {15, 16, 17}) 

带来如下错误:

System.Linq.Dynamic.ParseException: 'No 'it' is in scope'

那么,我如何过滤列表或数组?

我使用的是最新的System.Linq.Dynamic库的NuGet如果1.0.7

回答

1

以下将工作,但您必须确保CaseID和数组值具有相同的类型。

ret.Where("@0.Any(outerIt.CaseID=it)", array)

+1

这仍然给我的错误'System.Linq.Dynamic.ParseException:“不 '它' 是scope'' – JGOakley

0

不太知道我理解你的问题的权利。 但是你的意思是这样吗? 这是用Lambda表达式解决的。

var listA = new[] {1, 2, 3, 5, 8}; 
var listB = new[] {1, 3, 5, 7, 11}; 
var res = listA.Where(itemA => listB.Contains(itemA)); 
// res = {1,3,5}