我正在尝试使用PredicateBuilder来编写动态linq查询。在我的对象中,我有一个“状态”列表,我有另一个我想要搜索的状态列表。
所以我需要能够查看我的object.Status属性(列表)并查看它是否包含查询列表中的任何项目。
我一直在使用.Any()和.Contains(),但似乎无法找到正确的语法。
我做错了什么?以下是我尝试过的一些内容,但没有一个具有正确的语法。
myObject.Statuses.Contains(myStatusList);
myObject.Statuses.Any(myStatusList);
myObject.Statuses.Any(s => s == myStatusList);
答案 0 :(得分:9)
got.Any(x => want.Contains(x))
然而,经过进一步思考,我会编写一个ContainsAny
扩展方法,以使其更具可读性。实现可能是相同的(虽然want.Intersect(got).Any()
也可以。)
答案 1 :(得分:5)
你的意思是:
myObject.Statuses.Any(s => myStatusList.Contains(s));
?这也是等同的:
myStatusList.Any(s => myObject.Statuses.Contains(s));
答案 2 :(得分:1)
如何交叉http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#intersect1
public void Linq50()
{
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var commonNumbers = numbersA.Intersect(numbersB);
Console.WriteLine("Common numbers shared by both arrays:");
foreach (var n in commonNumbers)
{
Console.WriteLine(n);
}
}