効率に関して私が気付いた唯一のことは、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]);
}
}
または、確実に一致するものが 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を使うとLinq query expression
コードが読みやすくなると思いますが、効率的には問題ないと思います。別の回答で行われたように、LINQ メソッド構文を使用して LINQ クエリ式を記述することもできます。