从“RoomLayerBuilding”实体集筛选数据,将筛选出的数据转入“ListMenuCatalog”和“ListMenuSubitem”集合中。1、“RoomLayerBuilding”实体集为元数据实体集,数据如下图(各个数据库字段为“RoomLayerBuilding”属性):
    
    
    
2、“ListMenuCatalog”中的一个属性,由“ListMenuSubitem”定义。
     
     public class ListMenuCatalog  : INotifyPropertyChanged
     { 
     public String CatalogName    
     public ListMenuSubitem  SubitemName
     }3、“ListMenuSubitem”
     public class ListMenuSubitem  : INotifyPropertyChanged
     {
            public String DpItemName
            public String DpItemTag
     }
问题:现在想写一个方法,如下, 
      public List<ListMenuCatalog> GetRoomLayerBuildingLists()
        {
            //实例化“ListMenuCatalog”对象集合
            List<ListMenuCatalog> listmenucatalogs = new List<ListMenuCatalog>();
            //获取“RoomLayerBuilding”对象集合,这个对象集合已经由“DataTable”填充
            List<RoomLayerBuilding> roomlayerbuildings = this.GetRoomLayerBuildingDatas();
            
            //var listbybuilding = roomlayerbuildings.Distinct(r => r.BuildingNo).ToList();
            //var listbybuilding = (from lb in roomlayerbuildings select roomlayerbuildings.BuildingNo).Distinct();             
            return listmenucatalogs;
        }
   
需求:现在想根据“List<RoomLayerBuilding> roomlayerbuildings”提取数据到“List<ListMenuCatalog> listmenucatalogs”中。规则:
     1、从“List<RoomLayerBuilding> roomlayerbuildings”筛选“BuildingNo”不重复的集合,命名为“listcatalogs”。     2、遍历“listcatalogs”,将“BuildingName”属性绑定到“List<ListMenuCatalog> listmenucatalogs”的“CatalogName”属性。     3、同时,根据每条遍历的“listcatalogs”项中的“BuildingNo”,从“List<RoomLayerBuilding> roomlayerbuildings”筛选出结果集。将该结果集的“DpItemName”和“DpItemTag”赋值到“ListMenuCatalog”的“CatalogName”和“SubitemName”,然后新形成的“ListMenuCatalog”结果集。     4、将新形成的“ListMenuCatalog”结果集赋值给“listcatalogs”集合的“SubitemName”属性。这样的方法应该怎样用“Linq to object”实现???

解决方案 »

  1.   

    从你的描述来看,就是个groupby BuildingNo后根据条件生成新类的过程给些测试数据和最终结果来看看
      

  2.   

    List 的Find方法可以用lambda表达式
      

  3.   

    linq 类似吧  public List<User > SortUserListByFirstName(List< User> userList)
            {
                    IEnumerable<User > query =
                        from n in userList
                        orderby n.LastName descending , n.FirstName ascending
                        select n;
                    return query.ToList<User >();
            }
      

  4.   


    谢谢您,不好意思,昨天有事出去了。测试数据就是这些啊。

    这要简单的根据思路写一下就好了,关键是从“List<>”集合中筛选数据。
      

  5.   

    有关于“Linq”函数的学习资料么?
      

  6.   

    猜想前面两个:
    1. var listcatalogs = from rbl in roomlayerbuildings
                       group rbl by rbl.BuildingNo into g
                       where g.Count() == 1
                       select g.First();2. listmenucatalogs = listmenucatalogs.Join(listcatalogs, 
              rbl => rbl.BuildingNo,  //不太确定是否联接字段
              lmc => lmc.BuildingNo, 
             (rbl, lmc) => { lmc.CatalogName = rbl.BuildingName; return lmc; }).ToList();
      

  7.   


    这是Linq To  SQL对吧,用“Linq to  object”呢?
      

  8.   


    期望:
        
        1、从结果集中筛选出“BuildingNo”不重复的记录。    2、筛选出来的每条记录的“BuildingName”属性用于实例化“ListMenuCatalog”实体集的“CatalogName ”属性。而它的“SubitemName”属性下面说。    3、“ListMenuCatalog”实体集的“SubitemName”属性,要根据其“CatalogName ”属性,从“roomlayerbuildings”(源数据集)中筛选出“RoomNo”和“RoomName”作为“ListMenuSubitem”对象集合,用于实例化“ListMenuCatalog”实体集的“SubitemName”属性。    4、将“ListMenuCatalog”实体集返回。
      

  9.   

    Linq To SQL中对应的大多数IQueryable<T>扩展方法在Linq to object中都有相应的IEnumrable<T>版本,所以是可以用的。但反过来则不一定
      

  10.   

    var roomlayerbuildings = this.GetRoomLayerBuildingDatas().Select(rlb => rlb.BuildingNo).Distinct().ToList(); 
      

  11.   

    var roomlayerbuildings = this.GetRoomLayerBuildingDatas().Select(rlb => rlb.BuildingNo).Distinct().ToList();foreach (var item in roomlayerbuildings)
                {
                    ListMenuCatalog lmc = new ListMenuCatalog();
                    lmc.CatalogName = item.BuildingName;
                    
                }

    问题:提示“string”不包含"BuildingName"的定义,为什么???
    错误信息如下:
         错误 1 “string”不包含“BuildingName”的定义,并且找不到可接受类型为“string”的第一个参数的扩展方法“BuildingName”(是否缺少 using 指令或程序集引用?) C:\Users\Administrator\Desktop\DX4.0\Mycems.BLL\RoomLayerBuildingDatas.cs 66 40 Mycems.BLL
      

  12.   

    "Dictionary"和"HashTalbe"实现了“IEqualityComparer”GetHashCode返回的什么???他的作用是什么???