我可以将以下语句转换为LINQ吗?
Dictionary<Guid, Guid> BatchID_To_RunID = new Dictionary<Guid, Guid>();
List<Guid> BatchIDList_InCase = new List<Guid>();
foreach (var x in BatchID_To_RunID)
{
if (x.Value == RunID)
{
Guid BatchID = x.Key;
BatchIDList_InCase.Add(x.Key);
}
}
谢谢
答案 0 :(得分:1)
好吧,if
实际上是一个过滤器,建议一个Where
调用,而x.Key
的使用实际上是一个投影,建议一个Select
调用。因此,假设BatchIDList_InCase
在此循环之前为空,则可以将其替换为:
// TODO: Rename BatchID_To_RunID to follow .NET naming conventions
var batchIds = BatchID_To_RunID
.Where(pair => pair.Value == RunID)
.Select(pair => pair.Key)
.ToList();
或使用查询表达式:
var batchIds = (from pair in BatchID_To_RunID where pair.Value == RunID select pair.Key)
.ToList();
答案 1 :(得分:1)
因此,您有一个字典BatchID_To_RunID
和一个变量RunId
要求
请给我字典中所有值等于RunId的项的键。
如果您正是这样写的话,解决方案就不是很困难了:
GUID RunId = ...
var result = BatchID_To_RunID // this is a sequence of KeyValuePair<GUID, GUID>
// Keep only those KeyValuePairs with a value equal to RunId
.Where(keyValuePair => keyValuePair.Value == RunId)
// from the remaining keyValuePairs, Select the Key
.Select(keyValuepair => keyValuePair.Key)
// and convert this sequence of GUIDs into a List:
.ToList();
简单的漫画卓悦!
答案 2 :(得分:0)
这是一种实现方法:
BatchIDList_InCase.AddRange(BatchID_To_RunID.Where(b => b.Value == RunID).Select(b => b.Key).ToList());