当前位置:编程学习 > C#/ASP.NET >>

“List实体集”筛选数据

从“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”实现???

--------------------编程问答-------------------- --------------------编程问答-------------------- 从你的描述来看,就是个groupby BuildingNo后根据条件生成新类的过程

给些测试数据和最终结果来看看 --------------------编程问答-------------------- 提问完人就没了么,这个帖子可来回看了N遍,楼主都没有给出回复 --------------------编程问答-------------------- List 的Find方法可以用lambda表达式 --------------------编程问答-------------------- 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 >();
        }
--------------------编程问答--------------------
引用 2 楼  的回复:
从你的描述来看,就是个groupby BuildingNo后根据条件生成新类的过程

给些测试数据和最终结果来看看


谢谢您,不好意思,昨天有事出去了。

测试数据就是这些啊。



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



--------------------编程问答-------------------- 有关于“Linq”函数的学习资料么? --------------------编程问答-------------------- 比如上边14条数据 的期望结果是什么样子的 --------------------编程问答-------------------- 猜想前面两个:
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();
--------------------编程问答--------------------
引用 9 楼  的回复:
猜想前面两个:
C# code
1. var listcatalogs = from rbl in roomlayerbuildings
                   group rbl by rbl.BuildingNo into g
                   where g.Count() == 1
                   select g.First(……


这是Linq To  SQL对吧,用“Linq to  object”呢? --------------------编程问答--------------------
引用 6 楼  的回复:
引用 2 楼  的回复:

从你的描述来看,就是个groupby BuildingNo后根据条件生成新类的过程

给些测试数据和最终结果来看看


谢谢您,不好意思,昨天有事出去了。

测试数据就是这些啊。



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


期望:
    
    1、从结果集中筛选出“BuildingNo”不重复的记录。

    2、筛选出来的每条记录的“BuildingName”属性用于实例化“ListMenuCatalog”实体集的“CatalogName ”属性。而它的“SubitemName”属性下面说。

    3、“ListMenuCatalog”实体集的“SubitemName”属性,要根据其“CatalogName ”属性,从“roomlayerbuildings”(源数据集)中筛选出“RoomNo”和“RoomName”作为“ListMenuSubitem”对象集合,用于实例化“ListMenuCatalog”实体集的“SubitemName”属性。

    4、将“ListMenuCatalog”实体集返回。
--------------------编程问答--------------------
引用 10 楼  的回复:
引用 9 楼  的回复:

猜想前面两个:
C# code
1. var listcatalogs = from rbl in roomlayerbuildings
group rbl by rbl.BuildingNo into g
where g.Count() == 1
select g.First(……


这是Linq To  SQL对吧,用“Linq to  ob……

Linq To SQL中对应的大多数IQueryable<T>扩展方法在Linq to object中都有相应的IEnumrable<T>版本,所以是可以用的。但反过来则不一定 --------------------编程问答--------------------
引用 11 楼  的回复:
引用 6 楼  的回复:

引用 2 楼  的回复:

从你的描述来看,就是个groupby BuildingNo后根据条件生成新类的过程

给些测试数据和最终结果来看看


谢谢您,不好意思,昨天有事出去了。

测试数据就是这些啊。



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


期望:
    
    1、从结果集……


能根据这个要求写写么,方便参考,谢谢了。。。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼  的回复:
linq 类似吧


C# code
  public List<User > SortUserListByFirstName(List< User> userList)
        {
                IEnumerable<User > query =
                    from n in userList
              ……
--------------------编程问答-------------------- var roomlayerbuildings = this.GetRoomLayerBuildingDatas().Select(rlb => rlb.BuildingNo).Distinct().ToList();  --------------------编程问答-------------------- 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
--------------------编程问答-------------------- 谢谢大家,问题解决了。 --------------------编程问答-------------------- "Dictionary"和"HashTalbe"实现了“IEqualityComparer”

GetHashCode返回的什么???他的作用是什么??? --------------------编程问答-------------------- 是的啦  --------------------编程问答--------------------
引用 18 楼  的回复:
谢谢大家,问题解决了。

MaRK --------------------编程问答-------------------- 看着好复杂 --------------------编程问答-------------------- 菜鸟来学习。。。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,