“List实体集”筛选数据

starrystarsky 2012-04-20 04:45:11
从“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”实现???

...全文
583 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybyjcel 2012-08-20
  • 打赏
  • 举报
回复
菜鸟来学习。。。
shaneregion 2012-08-20
  • 打赏
  • 举报
回复
看着好复杂
yzf86211861 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

谢谢大家,问题解决了。
[/Quote]
MaRK
hcyn3679 2012-05-13
  • 打赏
  • 举报
回复
是的啦
starrytime 2012-05-13
  • 打赏
  • 举报
回复
"Dictionary"和"HashTalbe"实现了“IEqualityComparer”

GetHashCode返回的什么???他的作用是什么???
starrycheng 2012-04-24
  • 打赏
  • 举报
回复
谢谢大家,问题解决了。
starrycheng 2012-04-23
  • 打赏
  • 举报
回复
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
starrycheng 2012-04-23
  • 打赏
  • 举报
回复
var roomlayerbuildings = this.GetRoomLayerBuildingDatas().Select(rlb => rlb.BuildingNo).Distinct().ToList();
anzhiqiang_touzi 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
linq 类似吧


C# code
public List<User > SortUserListByFirstName(List< User> userList)
{
IEnumerable<User > query =
from n in userList
……
[/Quote]
starrycheng 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 2 楼 的回复:

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

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


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

测试数据就是这些啊。



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

期望:

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

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

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

4、将“ListMenuCatalog”实体集返回。

starrycheng 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

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

这是Linq To SQL对吧,用“Linq to object”呢?
starrycheng 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 6 楼 的回复:

引用 2 楼 的回复:

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

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


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

测试数据就是这些啊。



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


期望:

1、从结果集……
[/Quote]

能根据这个要求写写么,方便参考,谢谢了。。。
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]
Linq To SQL中对应的大多数IQueryable<T>扩展方法在Linq to object中都有相应的IEnumrable<T>版本,所以是可以用的。但反过来则不一定
  • 打赏
  • 举报
回复
猜想前面两个:
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();
q107770540 2012-04-21
  • 打赏
  • 举报
回复
比如上边14条数据 的期望结果是什么样子的
starrycheng 2012-04-21
  • 打赏
  • 举报
回复
有关于“Linq”函数的学习资料么?
starrycheng 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

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

给些测试数据和最终结果来看看
[/Quote]

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

测试数据就是这些啊。



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



色拉油 2012-04-20
  • 打赏
  • 举报
回复
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 >();
}
色拉油 2012-04-20
  • 打赏
  • 举报
回复
List 的Find方法可以用lambda表达式
q107770540 2012-04-20
  • 打赏
  • 举报
回复
提问完人就没了么,这个帖子可来回看了N遍,楼主都没有给出回复
加载更多回复(1)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧