在.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代码吗?

在.net中按标准列出交集

如果我理解对了你的问题:

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中使用元组-查看这里