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节点只包含符合条件的? 求一递归算法? 如何将messagebox 显示在最前端? c#出力保存的问题 水晶报表有两个“详细资料”节怎么实现? panel中为何不出现滚动条? 高分求.net的聊天室源代码!! ADO连接返回数据出错 toolStripButton如何实现像toolBar中的按钮一样的toggle效果? 在C#中,怎样更好的实现VB中的CTYPE功能? 帮我猜猜USState是一种什么数据类型,好像不是结构 如何条件查询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节点只包含符合条件的?