【发布时间】:2017-04-29 11:34:00
【问题描述】:
我在 c#-LINQ 中做了一个简单的多连接代码。
但有些问题是这样发生的。
示例 1) 做得很好。结果是 [1, 2]。
public class tempClass1
{
public int i1;
public int i2;
}
public class tempClass2
{
public int i3;
public int i4;
}
public class CompareClass
{
public int compare1;
public int compare2;
}
List<tempClass1> tempList1 = new List<tempClass1>();
List<tempClass2> tempList2 = new List<tempClass2>();
public MainWindow()
{
InitializeComponent();
try
{
tempList1.Add(new tempClass1() { i1 = 1, i2 = 2 });
tempList1.Add(new tempClass1() { i1 = 3, i2 = 4 });
tempList1.Add(new tempClass1() { i1 = 5, i2 = 6 });
tempList2.Add(new tempClass2() { i3 = 1, i4 = 2 });
var result = from t1 in tempList1
join t2 in tempList2 on
new { compare1 = t1.i1, compare2 = t1.i2 } equals
new { compare1 = t2.i3, compare2 = t2.i4 }
select t1;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
示例 2) 比较代码不起作用。结果为空。
public class tempClass1
{
public int i1;
public int i2;
}
public class tempClass2
{
public int i3;
public int i4;
}
public class CompareClass
{
public int compare1;
public int compare2;
}
List<tempClass1> tempList1 = new List<tempClass1>();
List<tempClass2> tempList2 = new List<tempClass2>();
public MainWindow()
{
InitializeComponent();
try
{
tempList1.Add(new tempClass1() { i1 = 1, i2 = 2 });
tempList1.Add(new tempClass1() { i1 = 3, i2 = 4 });
tempList1.Add(new tempClass1() { i1 = 5, i2 = 6 });
tempList2.Add(new tempClass2() { i3 = 1, i4 = 2 });
var result = from t1 in tempList1
join t2 in tempList2 on
new CompareClass { compare1 = t1.i1, compare2 = t1.i2 } equals
new CompareClass { compare1 = t2.i3, compare2 = t2.i4 }
select t1;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
我不知道这些代码有什么不同。请告诉我一些指导方针或反馈。
【问题讨论】:
-
你需要阅读this SO问题。