LINQ查询将'StartsWith'与数组一起使用

用户名

在我的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章