LINQ查询使用带有数组的'StartsWith'

时间:2014-02-13 09:33:23

标签: c# arrays linq

在我的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

由于

2 个答案:

答案 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