Linq查询where子句

时间:2014-05-10 11:04:33

标签: c# linq

我正在使用Linq to Entities,我有一个像这样的查询

context.Hotels
        .Where(h => h.HotelType.Contains(s.HotelTypeId.ToString()))
        .Select(hotel => new Model.Hotel
           {
              HotelId = hotel.HotelID,
              HotelName = hotel.HotelName,
              HotelFileName = hotel.HotelFileName,
              StarRating = hotel.StarRating,
              CountryName = hotel.Country.CountryName,
              PlaceName = hotel.Place.PlaceName
           })

我在.ToString()子句中使用where,我知道在使用Linq To Entities时无效。但实际上“HotelType”列的值用管道字符分隔,例如1 | 2 | 3.现在我只想提取那些类型为1的酒店。怎么可能?请帮忙

4 个答案:

答案 0 :(得分:3)

这是一个黑客,但它应该工作。

Where(h => ("|" + h.HotelType + "|").Contains("|" + s.HotelTypeId.ToString() + "|"))

首先将1|2|3转换为|1|2|3|然后查找|1||2|,无论ID是第一个还是最后一个还是中间的某个位置,它都会有效。

但是你真的应该对你的数据库进行重构 - 通常一个非常糟糕的主意是让信息编码完成并且你已经发现了,因为你不得不问如何做一些应该是微不足道的事情。

答案 1 :(得分:0)

答案 2 :(得分:0)

context.Hotels
    .Where(h => h.HotelType.Split('|').Select(str=>Convert.ToInt32(str)).Contains(s.HotelTypeId))
    .Select(hotel => new Model.Hotel
       {
          HotelId = hotel.HotelID,
          HotelName = hotel.HotelName,
          HotelFileName = hotel.HotelFileName,
          StarRating = hotel.StarRating,
          CountryName = hotel.Country.CountryName,
          PlaceName = hotel.Place.PlaceName
       })

答案 3 :(得分:0)

假设您HotelTypeint,则可以执行此操作。

context.Hotels
    .Where(h => h.HotelType.Split("|").Select(ht=>int.Parse(ht))
    .Contains(s.HotelTypeId))
    .Select(hotel => new Model.Hotel
       {
          HotelId = hotel.HotelID,
          HotelName = hotel.HotelName,
          HotelFileName = hotel.HotelFileName,
          StarRating = hotel.StarRating,
          CountryName = hotel.Country.CountryName,
          PlaceName = hotel.Place.PlaceName
       });