就效率而言,我唯一注意到的是您使用了 Enumerable.Count() 方法,该方法在您在 for 循环中再次显式循环之前枚举结果。我认为 LINQ 实现将摆脱通过结果来计算元素的传递。
我不知道您对使用LINQ QUERY EXPRESSIONS有何感受,但这是我最喜欢的:
var matched = from user in Users
join item in oracleQuery on user.getEmployeeID().ToString() equals item[0,0].ToString()
select new {user = user, IDMStatus = item[0,1] };
foreach (var pair in matched)
{
pair.user.setIDMStatus(pair.IDMStatus);
}
您还可以使用嵌套的 foreach 循环(如果有多个匹配项并且 set 被多次调用):
foreach (var user in Users)
{
foreach (var match in oracleQuery.Where(item => user.getEmployeeID().ToString() == item[0,0].ToString()) {
user.setIDMStatus(match[0,1]);
}
}
或者如果肯定只有一场比赛:
foreach (var user in Users)
{
var match = oracleQuery.SingleOrDefault(item => user.getEmployeeID().ToString() == item[0,0].ToString());
if (match != null) {
user.setIDMStatus(match[0,1]);
}
}
我认为您编写的内容没有任何真正的效率问题,但您可以将其与 LINQ 中的实现进行基准测试。我认为使用foreach
or aLinq query expression
可能会使代码更易于阅读,但我认为效率没有问题。您还可以使用 LINQ 方法语法编写 LINQ 查询表达式,就像在另一个答案中所做的那样。