使用LINQ返回列表

时间:2012-08-20 08:02:56

标签: linq list

我想使用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);
}

这只返回列表中的第一项。如何退回整个清单?

提前致谢

3 个答案:

答案 0 :(得分:2)

首先,根据评论,您应该准确了解现有代码的每一行的作用。 (您还应该尝试遵循.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,我认为这样做失败。

答案 1 :(得分:0)

您需要让函数返回List<BO.Hotel>而不是酒店,并相应地调整查询和Mapper函数。

答案 2 :(得分:0)

public List<BO.Hotel> getHotels()
    {
        TripBagEntities db = new TripBagEntities();
        return (from m in db.HotelEntities
                     where m.id < 10
                      select Mapper.ToHotelObject(m)).ToList();
    }