在.net中按标准列出交集
本文关键字:标准 net | 更新日期: 2023-09-27 18:17:01
我的观点是:下面是数据类:
class Data
{
public string name;
public int version;
}
这里是数据列表:
Ilist<Data> List_old = {new Data{name = "1", version = 1}, new Data{name = "2", version = 1}};
Ilist<Data> List_new = {new Data{name = "1", version = 2}, new Data{name = "3", version = 1}, new Data{name = "2", version = 1}};
因此,我需要一个元组列表- IList<Tuple<Data, Data>>
-第一个数据对象来自List_new,第二个来自List_old,按标准-数据对象具有相同的名称,但是-首先具有更大的版本,第二个或第二个是null,如果在List_old中没有任何数据项具有相同的名称来自List_new。考虑到结果应该是:
IList<Tuple<Data, Data>> result = { {List_new[0], List_old[0]}, {List_new[1], null}};
你能帮我写LINQ代码吗?
如果我理解对了你的问题:
var q =
(from n in List_new
join tmp in List_old on n.name equals tmp.name into g
from o in g.DefaultIfEmpty()
where o == null || o.version < n.version
select new Tuple<Data, Data>(n, o)).ToList();
谢谢大家-但似乎我得到了我的两个问题的答案:LINQ代码:
IList<Tuple<Data,Data> > UpdateList = List_new.Where(
delegate(Data item)
{
return List_old.Any(y => item.name == y.name && item.Version > y.Version) ||
!List_old.Any(y => item.name == y.name);
}
).Select(
delegate(Data item)
{
Data old_item = List_old.FirstOrDefault(y => item.name == y.name && item.Version > y.Version);
return new Tuple<Data,Data>(item, old_item);
}
).ToList();
在。net 2.0-3.5中使用元组-查看这里