我有两个清单:
List<A> listA1 = GetFirstList();
List<A> listA2 = GetSecondList();
and class A
定义
class A
{
public int Id {get; set;}
public DateTime ModifiedDate {get; set;}
public string Type {get; set;}
}
我正在根据以下某些条件做一些事情。
List<A> listA1 = GetFirstList();
List<A> listA2 = GetSecondList();
List<A> result = new List<A>();
for(int i = 0; i < listA1; i++)
{
if(listA1[i].ModifiedDate != listA2[i].ModifiedDate)
{
result.Add(listA1[i]);
}
}
假设:两个列表都包含相同数量的项目Id
and Type
以相同的顺序。这就是为什么我只是检查ModifiedDate
由于项目数量和顺序,其余部分会自动处理。
我用它改变了LINQ
如下所示,它工作正常。
var match = ListA1
.Where(a => listA2.First(ct => ct.Id == a.Id).ModifiedDate != a.ModifiedDate);
result.AddRange(match);
但它会迭代两者ListA1
and ListA2
但在第一种情况下它只迭代一次。
我的问题是,我可以做吗LINQ
通过保留其他集合的索引?换句话说我可以做LINQ
比现在更优化?
您可以使用Enumerable.Zip
通过索引链接两个序列:
List<A> result = listA1.Zip(listA2, (a1, a2) => new { a1, a2 })
.Where(x => x.a1.ModifiedDate != x.a2.ModifiedDate)
.Select(x => x.a1)
.ToList();
即使两个序列都没有实现,这也会起作用IList
/IList<T>
,因此无法通过索引访问这些项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)