C# 在两个列表中迭代
一周前我问了这个问题,现在我发现了一些我遗漏的问题。我不知道如果我重新打开这个问题,是否会得到任何答复,这就是为什么我创建了一个新的问题。最后一个条件不起作用。 我试图用不同的对象在两个列表中进行迭代C# 在两个列表中迭代,c#,C#,一周前我问了这个问题,现在我发现了一些我遗漏的问题。我不知道如果我重新打开这个问题,是否会得到任何答复,这就是为什么我创建了一个新的问题。最后一个条件不起作用。 我试图用不同的对象在两个列表中进行迭代 如果abbrv和日期相同,我将从中添加对象 listTest2到listTest3 如果abbrv相同,但日期不同,我将添加 对象从listTest2切换到listTest3,我正在切换已完成的 属性设置为true。此外,我正在添加listTest1中的记录 要列出test3 如果listTes
- 如果abbrv和日期相同,我将从中添加对象 listTest2到listTest3
- 如果abbrv相同,但日期不同,我将添加 对象从listTest2切换到listTest3,我正在切换已完成的 属性设置为true。此外,我正在添加listTest1中的记录 要列出test3李>
- 如果listTest1中的abbrv在listTest2中不存在,我将添加它 从listTest1到listTest3的记录
- 如果listTest2中的abbrv不存在于listTest2中。我补充说 从listTest2到listTest2的记录
类程序
{
静态void Main(字符串[]参数)
{
Test1 Test1=newtest1(){abbrv=“Test1”,date=newdatetime(2017,11,12),completed=false};
Test1 test2=newtest1(){abbrv=“test2”,date=newdatetime(2017,12,17),completed=false};
Test1 test5=newtest1(){abbrv=“test5”,date=newdatetime(2017,12,12),completed=false};
Test2 test3=newtest2(){abbrv=“Test1”,date=newdatetime(2017,11,12),completed=false,abbrevName=“AbbrvName1”};
Test2 test4=newtest2(){abbrv=“Test2”,date=newdatetime(2017,12,12),completed=false,abbrevName=“AbbrvName2”};
Test2 test7=newtest2(){abbrv=“Test5”,date=new DateTime(2017,12,18),completed=false,abbrevName=“AbbrvName3”};
Test2 test6=newtest2(){abbrv=“test6”,date=new DateTime(2017,12,18),completed=false,abbrevName=“AbbrvName3”};
List listTest1=新列表();
List listTest2=新列表();
List listTest3=新列表();
listTest1.Add(test1);
列表test1.Add(test2);
列表test1.Add(test5);
列表test2.Add(test6);
列表test2.Add(test3);
列表test2.Add(test4);
列表test2.Add(test7);
for(int i=0;i
我不确定我是否完全遵守了您声明的条件,但您似乎加入了两个不同的列表。为此,您可能会发现以下LINQ完全外部联接非常有用
var leftJoin = from t1 in listTest1
join t2 in listTest2 on t1.abbrv equals t2.abbrv into lj
from s in lj.DefaultIfEmpty()
select new Test2() {abbrv = t1.abbrv, date = t1.date, completed = t1.completed, abbrevName = s.abbrv};
var rightJoin = from t2 in listTest2
join t1 in listTest1 on t2.abbrv equals t1.abbrv into rj
from s in rj.DefaultIfEmpty()
select t2;
var fullOuterJoin = leftJoin.Union(rightJoin);
我不确定我是否完全遵守了你规定的条件,但你似乎加入了两个完全不同的名单。为此,您可能会发现以下LINQ完全外部联接非常有用
var leftJoin = from t1 in listTest1
join t2 in listTest2 on t1.abbrv equals t2.abbrv into lj
from s in lj.DefaultIfEmpty()
select new Test2() {abbrv = t1.abbrv, date = t1.date, completed = t1.completed, abbrevName = s.abbrv};
var rightJoin = from t2 in listTest2
join t1 in listTest1 on t2.abbrv equals t1.abbrv into rj
from s in rj.DefaultIfEmpty()
select t2;
var fullOuterJoin = leftJoin.Union(rightJoin);
我将使用分隔检查存在性的部分,以便查找存在于一个列表中而不存在于另一个列表中的对象。
然后对其余条件使用您的算法
下面是一个示例,显示如何按abbrv name查找2个列表未共享的对象:
var result = listTest1.Where(l => !listTest2.Any(l2 => l2.abbrv == l.abbrv));
var result2 = listTest2.Where(l => !listTest1.Any(l1 => l1.abbrv == l.abbrv));
Console.WriteLine("objects that exist in list 1 and not list list 2, based on abbrv string");
foreach (var t in result)
{
Console.WriteLine(t.abbrv);
}
Console.WriteLine("objects that exist in list 2 and not list list 1, based on abbrv string");
foreach (var t in result2)
{
Console.WriteLine(t.abbrv);
}
执行此操作的输出将是:
objects that exist in list 1 and not list list 2, based on abbrv string
objects that exist in list 2 and not list list 1, based on abbrv string
Test6
我将使用分隔检查存在性的部分,以便查找存在于一个列表中而不存在于另一个列表中的对象。
然后对其余条件使用您的算法
下面是一个示例,显示如何按abbrv name查找2个列表未共享的对象:
var result = listTest1.Where(l => !listTest2.Any(l2 => l2.abbrv == l.abbrv));
var result2 = listTest2.Where(l => !listTest1.Any(l1 => l1.abbrv == l.abbrv));
Console.WriteLine("objects that exist in list 1 and not list list 2, based on abbrv string");
foreach (var t in result)
{
Console.WriteLine(t.abbrv);
}
Console.WriteLine("objects that exist in list 2 and not list list 1, based on abbrv string");
foreach (var t in result2)
{
Console.WriteLine(t.abbrv);
}
执行此操作的输出将是:
objects that exist in list 1 and not list list 2, based on abbrv string
objects that exist in list 2 and not list list 1, based on abbrv string
Test6
我建议使用
publicstaticlist-GetResults(List-list1,List-list2)
{
var join=list1.FullJoin(list2,key1=>key1.Abbrv,
firstSelector=>新数据
{
Abbrv=firstSelector.Abbrv,
Date=firstSelector.Date,
Desc=firstSelector.Desc
},
secondSelector=>新数据
{
Abbrv=secondSelector.Abbrv,
日期=秒选择器。日期,
Desc=secondSelector.Desc
},
(第一,第二)=>新数据
{
Abbrv=second.Abbrv,
日期=秒。日期,
Desc=秒。Desc
});
var mem=joined.ToList();
返回mem;
}
单元测试
[TestMethod]
公开测试()
{
//安排
var listTest1=GetTest1Data();
var listTest2=GetTest2Data();
//表演
变量r