这是我的观点: 这是数据类:
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,按标准获取 - 数据对象具有相同的名称但是 - 首先有更大的版本,第二个或第二个如果List_old中没有任何与List_new具有相同名称的数据项,则为null。
考虑到结果应该是:
IList<Tuple<Data, Data>> result = { {List_new[0], List_old[0]}, {List_new[1], null}};
你可以帮助LINQ代码执行吗? 我用这个绞尽脑汁......
答案 0 :(得分:3)
如果我正确解释了你的问题:
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();
答案 1 :(得分:0)
谢谢你们 - 但似乎我得到了回答我的两个问题: 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中使用Tuple - 查看here