c# List 查询的问题求解 本帖最后由 nevereverlost 于 2013-12-19 15:01:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实就是xml的解析,请参考我这篇博客中的一个例子。http://blog.csdn.net/chinacsharper/article/details/9246627 http://blog.csdn.net/happy09li/article/details/7431967 不是xml解析,我已经反序列化成类GetProdResponse了,现在是怎么用List的筛选方法把我要的数据筛选出来。 重申,现在是想知道怎么写List的过滤方法,不是解析xml或者其它无关的。用.Where .Find .FindAll 可以过滤的出来不?因为是要查询第二级List的数据。求高手啊。~ 版主大哥,跟Excel没关系,别灌水哦~ //List<HotelForGetProd> HotelList;//List<SupplyForGetProd> SupplyList;for(int i = 0; i < HotelList.Count; i++){ HotelForGetProd hfgp = HotelList[i]; if(hfgp.HotelID = "JD07330") { //do something }} GetProdRS.SupplyList .Where(supply => supply.HotelList.Any(hotel => hotel.HotelID == "XXX")) .ToList() 是的,我刚开始也用这个Any,但是只要有一个子节点符合这个条件,他返回整个节点下的所有子字节点。我需要的是能把这些不符合条件的字节点都自动过滤掉,只返回满足条件的节点。 List<SupplyForGetProd> lstSupply = GetProdRS.SupplyList.Contains(t => t.SupplyID == "NZ00172").ToList();用Contains 这个 类似模糊查询。把所有的查询出来。http://www.dotblogs.com.tw/puma/archive/2008/03/16/1613.aspx GetProdRS.SupplyList.First(t => t.SupplyID == "NZ00172") List<SupplyForGetProd> lstSupplyTemp = GetProdRS.SupplyList;lstSupply = GetProdRS.SupplyList.FindAll(t => { t.HotelList = t.HotelList.FindAll(h => h.HotelID == clsHotel.Hotel_id); if (t.HotelList != null && t.HotelList.Count > 0) { return true; } else { return false; } }).ToList();我写的这个方法可以实现。返回的数据,Supply节点下的HOTELS节点只包含符合条件的。但是现在有个新的问题,就是执行一遍过后,lstSupplyTemp和GetProdRS.SupplyList不符合要求的节点都被自动删除了,导致我下一次循环不能使用GetProdRS.SupplyList这个数据了。我查了下,原来lstSupplyTemp的复制操作并非真正的复制,其指针其实都指向同一数据,那怎么才能实现真正的复制,即改变任何一个list,另一个都不会发生改变?或者还是刚才这个问题,怎么实现过滤?返回的Supply节点下的HOTELS节点只包含符合条件的? 多个进程访问同一文件,如何做到互斥访问呢? 问个关于socket的问题 记录某个按钮被按下了多少次的问题 大侠们好,问个日期相减的问题!!!20分 如何判断字符串中运算符表达式的真假值。 TempMenuItem.Click += new System.EventHandler(NewConnection); 根据屏幕分辨率(800×600、1024×768),软件自动调节窗体? 小白求教问题 XML的格式转化为自定义格式? 低级问题,帮个忙 如何条件查询xml值 docx怎么在Microsoft visual Studio2010用
用.Where .Find .FindAll 可以过滤的出来不?
因为是要查询第二级List的数据。
求高手啊。~
//List<HotelForGetProd> HotelList;
//List<SupplyForGetProd> SupplyList;
for(int i = 0; i < HotelList.Count; i++)
{
HotelForGetProd hfgp = HotelList[i];
if(hfgp.HotelID = "JD07330")
{
//do something
}
}
.Where(supply => supply.HotelList.Any(hotel => hotel.HotelID == "XXX"))
.ToList()
我需要的是能把这些不符合条件的字节点都自动过滤掉,只返回满足条件的节点。
用Contains 这个 类似模糊查询。把所有的查询出来。
http://www.dotblogs.com.tw/puma/archive/2008/03/16/1613.aspx
List<SupplyForGetProd> lstSupplyTemp = GetProdRS.SupplyList;
lstSupply = GetProdRS.SupplyList.FindAll(t =>
{
t.HotelList = t.HotelList.FindAll(h => h.HotelID == clsHotel.Hotel_id);
if (t.HotelList != null && t.HotelList.Count > 0)
{
return true;
}
else
{
return false;
}
}).ToList();
我写的这个方法可以实现。返回的数据,Supply节点下的HOTELS节点只包含符合条件的。
但是现在有个新的问题,就是执行一遍过后,lstSupplyTemp和GetProdRS.SupplyList不符合要求的节点都被自动删除了,导致我下一次循环不能使用GetProdRS.SupplyList这个数据了。
我查了下,原来lstSupplyTemp的复制操作并非真正的复制,其指针其实都指向同一数据,那怎么才能实现真正的复制,即改变任何一个list,另一个都不会发生改变?或者还是刚才这个问题,怎么实现过滤?返回的Supply节点下的HOTELS节点只包含符合条件的?