C# 连接两个数据集的最佳方法
给定以下linq和lambda表达式,使用多个连接条件连接两个数据集的最佳方法是什么?所有查询都会产生相同的结果C# 连接两个数据集的最佳方法,c#,linq,lambda,C#,Linq,Lambda,给定以下linq和lambda表达式,使用多个连接条件连接两个数据集的最佳方法是什么?所有查询都会产生相同的结果 var q1 = (from t1 in table1 from y in table2 where t1.ColumnName == y.ColumnName && t1.ColumnName2 == y.ColumnName2 select t1).ToList(); var q2 = (from t1 in table1
var q1 = (from t1 in table1
from y in table2
where t1.ColumnName == y.ColumnName
&& t1.ColumnName2 == y.ColumnName2
select t1).ToList();
var q2 = (from t1 in table1
join y in table2 on new { Key1 = t1.ColumnName, Key2 = t1.ColumnName2 }
equals new { Key1 = y.ColumnName, Key2 = y.ColumnName2 }
select t1).ToList();
var q3 = table1.Join(table2,
t1 => new { Key1 = t1.ColumnName, Key2 = t1.ColumnName2 },
y => new { Key1 = y.ColumnName, Key2 = y.ColumnName2 },
(t1, y) => new { t1 }).ToList();
为了好玩,我将查询分为三个单元测试。我添加了一个秒表来计时每个测试的执行。代码发布后,每个测试都会产生以下结果
问题1:已用时间:2500个滴答声
问题2:已用时间:11381次
问题3:运行时间:2406个滴答声
这些结果令我惊讶。有人能解释一下吗?
q2
和q3
是相同的,只是编译器允许使用不同的语法<调用代码>q2调用代码>q3。编译器自动将q2
转换为q3
q1
是交叉连接,q2
和q3
是内部连接。您应该使用q2
以提高可读性
顺便说一下,您可以将q3
替换为:
var q3 = table1.Join(table2,
t1 => new { Key1 = t1.ColumnName, Key2 = t1.ColumnName2 },
y => new { Key1 = y.ColumnName, Key2 = y.ColumnName2 },
(t1, y) => new { t1 }).ToList();
交叉连接的性能是否比内部连接差。唯一的区别是可读性吗?@DarthPaper更糟糕。笛卡尔积,你知道。