Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个列表中迭代_C# - Fatal编程技术网

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的记录
我知道这听起来很混乱,这就是为什么我会告诉你我得到了什么,我期待着什么

我发现,测试6的物体不见了

类程序
{
静态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