在我的LINQ查询中,我使用Where子句来检查属性是否存在于值数组中。我想更新查询:
string[] itemColour
string[] itemType
List<displayItem> displayItems = (from item in allItems
Where itemColour.Contains(item.colour)
Where itemType.Contains(item.type)
select new displayItem
......................etc...etc
所以我拥有的是
'我的'itemColour'数组包含此'item.colour'选择它'
'我的'itemType'数组包含此'item.type',请选择它'
我所追求的是
'我的'itemColour'数组中有一个项目,其中包含'item.colour',请选择它 '我的'itemType'数组有一个以'item.type'开头的项目,选择它
我知道'StartsWith'和'EndsWith',但不知道如何在这些数组中使用它们。
注意: itemColour可能包含颜色代码为“RGW”的项目我希望能够根据这三个字母中的任何一个选择此项目
更新
建议的解决方案:
var query = from item in allItems
where itemColour.Any(c => c.Contains(item.colour))
&& itemType.Any(t => t.StartsWith(item.type)
select ...;
有问题。如果我想要带回颜色代码'RB'的项目。 我的数组可能包含两个项目“R”和“B”,建议的查询只返回颜色代码为“R”或“B”的项目,而不是两者。
我正在使用MVC 5,LINQ TO Entity,.NET 4.5
由于
答案 0 :(得分:5)
我怀疑你正在寻找Any
,它允许你检查一个序列中的任何项目(在这种情况下是数组)是否与谓词匹配:
var query = from item in allItems
where itemColour.Any(c => c.Contains(item.colour))
&& itemType.Any(t => t.StartsWith(item.type)
select ...;
根据您拥有的颜色条目数量和确切的语义,可能会进行优化。
如果您要查找与 或类型匹配的项目,请改为使用||
:
var query = from item in allItems
where itemColour.Any(c => c.Contains(item.colour))
|| itemType.Any(t => t.StartsWith(item.type)
select ...;
编辑:您的描述不明确,但您完全有可能真正想要:
itemColour.Any(c => item.colour.Contains(c))
代替。从逻辑上考虑您要检查的内容,并适当地应用它。
答案 1 :(得分:2)
类似的东西:
from item in allItems
where itemColour.Any(x => x.Contains(item.colour))
where itemType.Any(x => x.StartsWith(item.type))
select new displayItem