“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 >();
}
谢谢您,不好意思,昨天有事出去了。
测试数据就是这些啊。
这要简单的根据思路写一下就好了,关键是从“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();
这是Linq To SQL对吧,用“Linq to object”呢? --------------------编程问答--------------------
期望:
1、从结果集中筛选出“BuildingNo”不重复的记录。
2、筛选出来的每条记录的“BuildingName”属性用于实例化“ListMenuCatalog”实体集的“CatalogName ”属性。而它的“SubitemName”属性下面说。
3、“ListMenuCatalog”实体集的“SubitemName”属性,要根据其“CatalogName ”属性,从“roomlayerbuildings”(源数据集)中筛选出“RoomNo”和“RoomName”作为“ListMenuSubitem”对象集合,用于实例化“ListMenuCatalog”实体集的“SubitemName”属性。
4、将“ListMenuCatalog”实体集返回。
--------------------编程问答--------------------
Linq To SQL中对应的大多数IQueryable<T>扩展方法在Linq to object中都有相应的IEnumrable<T>版本,所以是可以用的。但反过来则不一定 --------------------编程问答--------------------
能根据这个要求写写么,方便参考,谢谢了。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 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返回的什么???他的作用是什么??? --------------------编程问答-------------------- 是的啦 --------------------编程问答--------------------
MaRK --------------------编程问答-------------------- 看着好复杂 --------------------编程问答-------------------- 菜鸟来学习。。。
补充:.NET技术 , ASP.NET