在我的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
谢谢
我怀疑您在寻找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))
反而。从逻辑上考虑您要检查的内容,并适当地应用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句