【问题标题】:How to return all elements matching field in a List<Foo>?如何返回 List<Foo> 中所有匹配字段的元素?
【发布时间】:2016-03-11 10:23:40
【问题描述】:

我正在编写一种方法,该方法应返回列表中与电子邮件字段匹配的所有记录。但是我当前的实现只返回第一个元素,因为我正在使用.FirstOrDefault();

我使用 intellisense 过滤了其他可用的方法,并尝试使用 ToList();

return orderList.Where(c => c.Email == email).ToList();

但我收到一条错误消息,指出它无法转换,因为结果不是列表。我从中了解到结果不是列表类型,但是我怎样才能返回一个列表。

错误 30 无法将类型“System.Collections.Generic.List”隐式转换为“MongoDBApp.Models.OrderModel”

有人知道我如何返回完整的结果集吗?

这是目前只返回匹配电子邮件键的第一个或默认元素的方法:

public async Task<OrderModel> GetByEmailAsync(string email)
{
    if (orderList == null)
        await LoadDbAsync();
    return orderList.Where(c => c.Email == email).FirstOrDefault();
}

还有orderList的类型,OrderModel:

private static List<OrderModel> orderList = new List<OrderModel>();

【问题讨论】:

  • 将 GetByEmailAsync 返回类型更改为 Task>。该错误并不是说结果不是列表,而是告诉您它无法将您返回的 OrderModel 列表转换为单个 OrderModel

标签: c# linq list types


【解决方案1】:

将您的方法更改为此应该可以工作

public async Task<List<OrderModel>> GetByEmailAsync(string email)
{
    if (orderList == null)
        await LoadDbAsync();
    return orderList
            .Where(c => c.Email == email)
            .ToList();
}

对于您当前的实现async Task&lt;OrderModel&gt; GetByEmailAsync(string email),该方法需要返回单个OrderModel,因此您不能使用Where(...).ToList() 返回List&lt;OrderModel&gt;

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多