【问题标题】:How to combine to generic lists with add range and select criteria?如何将两个通用列表与添加范围和选择条件结合起来?
【发布时间】:2019-10-24 20:12:07
【问题描述】:

如何通过添加范围和选择条件组合到通用列表?这是一个虚构的例子。我可以添加范围,但不能过滤房间类型等标准。 “选择(先生 => mr.Type == RoomType.BedRoom)”不起作用。我可以用什么来代替 type = BedRoom 的列表?

public enum RoomType
{
    Bathroom = 1,
    BedRoom = 2,
    Kitchen = 3,
    RecRoom = 4
}

public class RoomsModel
{
    public RoomType Type { get; set; }
    public int Size { get; set; }
}

public List<RoomsModel> GetRooms(params)
{
    var result = new List<RoomsModel>();

    result = _service.GetRooms(house1);

    var moreRooms _service.GetRooms(house2);

    result.AddRange((from mr in moreRooms
                 select new RoomsModel
                 {
                     Type = mr.Type,
                     Size = mr.Size
                 }
                 ).Select(mr => mr.Type == RoomType.BedRoom).ToList());

    return result;
}

【问题讨论】:

    标签: c# .net entity-framework linq


    【解决方案1】:

    使用Where 代替Select

    result.AddRange(
      from mr in moreRooms
      where mr.Type == RoomType.BedRoom
      select new RoomsModel
      {
        Type = mr.Type,
        Size = mr.Size
      });
    

    Where 过滤项目。 Select 项目项目,即将序列中的每个项目转换为其他项目。

    【讨论】:

    • 我比你略胜一筹,但是 +1 是因为使用 100% LINQ 来完成这项工作。不太确定 LINQ 是否有 where 子句
    【解决方案2】:

    您需要使用Where 而不是Select

    result.AddRange((from mr in moreRooms
                     select new RoomsModel
                     {
                         Type = mr.Type,
                         Size = mr.Size
                     }
                     ).Where(mr => mr.Type == RoomType.BedRoom).ToList());
    
    

    【讨论】:

      【解决方案3】:

      另一种方式:

       result.AddRange(moreRooms.Where(mr => mr.Type == RoomType.BedRoom)
         .Select(mr => new RoomsModel {
           Type = mr.Type, 
           Size = mr.Size
         }));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 2019-12-27
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        相关资源
        最近更新 更多