【问题标题】:Returning a list using LINQ使用 LINQ 返回列表
【发布时间】:2012-08-20 08:02:56
【问题描述】:

我想使用 LINQ 查询返回存储在数据库中的对象列表。

我尝试了以下

public BO.Hotel getHotels()
{
    TripBagEntities db = new TripBagEntities();

    var hotels = (from m in db.HotelEntities
                  where m.id < 10
                  select m).ToList().First();

    return Mapper.ToHotelObject(hotels);
}

这仅返回列表中的第一项。如何返回整个列表?

提前致谢

【问题讨论】:

  • 拨打First()。 (在开始提问之前,您应该了解您的代码在做什么)

标签: linq list


【解决方案1】:

首先,根据评论,您应该准确了解现有代码的每一行首先执行的操作。 (您还应该尝试遵循 .NET 命名约定。)如果您猜测代码的哪一部分做了什么,最好阅读针对您正在使用的 LINQ 提供程序的好教程(实体框架?)。

我们真的不知道Mapper.ToHotelObject 做了什么,或者是否已经有转换整个序列的方法。不过这应该可行:

public List<BO.Hotel> GetHotels()
{
    // Note: you may want a using statement here...
    TripBagEntities db = new TripBagEntities();
    var hotels = db.HotelEntities
                   .Where(m => m.id < 10)
                   .AsEnumerable()
                   .Select(Mapper.ToHotelObject)
                   .ToList();
}

或者如果方法组转换不起作用:

public List<BO.Hotel> GetHotels()
{
    // Note: you may want a using statement here...
    TripBagEntities db = new TripBagEntities();
    var hotels = db.HotelEntities
                   .Where(m => m.id < 10)
                   .AsEnumerable()
                   .Select(m => Mapper.ToHotelObject(m))
                   .ToList();
}

请注意,我在整个查询中都使用了“点表示法”,因为当您使用 AsEnumerableToList 之类的内容时,它会变得更简单,而且您的查询表达式并不复杂。

AsEnumerable 调用将查询“转换”为 LINQ to Objects,因此查询到 SQL 的转换部分不需要尝试将 Mapper.ToHotelObject 转换为 SQL,我认为这会失败。

【讨论】:

    【解决方案2】:

    您需要让您的函数返回 List&lt;BO.Hotel&gt; 而不是 Hotel,并相应地调整您的查询和 Mapper 函数。

    【讨论】:

    • 谢谢,我会试试的。我也必须删除 .First() 对吗?
    【解决方案3】:
    public List<BO.Hotel> getHotels()
        {
            TripBagEntities db = new TripBagEntities();
            return (from m in db.HotelEntities
                         where m.id < 10
                          select Mapper.ToHotelObject(m)).ToList();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多