C#Linq .Find()返回很多结果

时间:2017-03-30 12:42:48

标签: c# linq

我正在尝试为我的应用程序创建一个简单的搜索功能。我正在使用Linq的.Find()方法来搜索对象列表。这一切都运作良好,我目前唯一的问题是我只得到第一个结果。我知道有一个事实,即有一个以上的结果,但我只得到一个。这是我的代码:

case 5: {
    //Search for Price

    Product searchResult = tempList.Find(x => x.getPrice() == searchPrice);
    if (searchResult != null) {
        //Present Result
        searchTable.Rows.Add(convertIDValue(searchResult.getProductID()), searchResult.getTitle(), searchResult.getYear(), searchResult.getAmount(), searchResult.getPrice());
    }
    else {
        MessageBox.Show("No product with that price", "0 results");
    }

    break;
}

我认为我可以将Product searchResult更改为List<Product> searchResults以获取产品列表,然后循环浏览该列表。但这给了我一个错误说:

  

无法隐式转换类型&#39; .Product&#39;到&#39; System.Collections.Generic.List&lt; .Product&gt;

有没有办法让Linq的.Find()返回多个结果?

5 个答案:

答案 0 :(得分:4)

使用Where()ToList()获取与条件匹配的所有对象List

替换

Product searchResult = tempList.Find(x => x.getPrice() == searchPrice);

List<Product> searchResult = tempList.Where(x => x.getPrice() == searchPrice).ToList();

答案 1 :(得分:4)

为此目的有一种FindAll方法:

List<Product> products = tempList.FindAll(x => x.getPrice() == searchPrice);

答案 2 :(得分:2)

  

Find()搜索与指定谓词定义的条件匹配的元素,并返回整个List中的第一个匹配项。

您需要改为使用FindAll()

答案 3 :(得分:0)

Microsoft解释了“Find()”方法:“搜索与指定谓词定义的条件匹配的元素,并返回整个List中的第一个匹配项。”

我建议您使用Linq扩展程序中的Where() method

不要忘记在当前课程中使用System.Linq 导入

答案 4 :(得分:0)

Product searchResult = 

表示您正在声明一个元素。您需要的是一系列产品,例如:

IEnumerable<product> searchResult  =

最简单的方法是将Find()更改为where():

IEnumerable<product> searchResult = tempList.Where(x => x.getPrice() == searchPrice);

这将创建一些产品集合。作为列表维护起来会更容易,所以:

list<product> searchResult = tempList.Where(x => x.getPrice() == searchPrice).toList();

了解IEnumerable接口:)