linq如何选择具有包含一个或多个值的数组(或列表)的子集合的父级

jas*_*son 14 .net c# linq collections

这似乎很容易

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId == "home"));
Run Code Online (Sandbox Code Playgroud)

当产品属性的值为"home"时返回gg

我需要它返回where和gg有一个数组的产品属性值,即

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId in "home,work"));
Run Code Online (Sandbox Code Playgroud)

mus*_*fan 24

关于什么...

string[] values = new string[] { "home", "work" };
var orx = gg.Where(x => x.ProductAttributes.Any(pa => values.Contains(pa.AttributeId));
Run Code Online (Sandbox Code Playgroud)

"home,work".Contains(pa.AttributeId)如果您的列表与您的示例一样可靠,甚至应该工作.(除非你能确保AttributeId不是任何列表单词的子串,例如"我",否则我不推荐这个.


sll*_*sll 5

使用Enumerable.Contains():

var orx = gg.Where(x => x.ProductAttributes
                        .Any(pa =>
                             array.Containspa(pa.AttributeId));

var orx = gg.Where(x => x.ProductAttributes
                        .Any(pa =>
                             "home, work".Split(',').Contains(pa.AttributeId));
Run Code Online (Sandbox Code Playgroud)