C# 如果条件为,则转换ForEach字典值并将键添加到列表中
我可以知道如何将下面的语句转换为LINQ吗C# 如果条件为,则转换ForEach字典值并将键添加到列表中,c#,linq,C#,Linq,我可以知道如何将下面的语句转换为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) { Gui
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);
}
}
Dictionary BatchID\u To\u RunID=new Dictionary();
List BatchIDList_InCase=new List();
foreach(BatchID\u到\u RunID中的变量x)
{
if(x.Value==RunID)
{
Guid BatchID=x.密钥;
BatchIDList_InCase.Add(x.Key);
}
}
谢谢这是一种方法:
BatchIDList\u InCase.AddRange(BatchID\u到\u RunID.Where(b=>b.Value==RunID)。选择(b=>b.Key.ToList());
好的,if
实际上是一个过滤器,建议调用Where
,而x.Key
的使用实际上是一个投影,建议调用Select
。因此,假设在此循环之前BatchIDList\u InCase
为空,则可以将其替换为:
//TODO:将BatchID\u重命名为\u RunID以遵循.NET命名约定
var batchIds=BatchID\u到\u 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();
因此,您有一个字典
BatchID\u To\u 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();
GUID RunId=。。。
var result=BatchID\u To\u RunID//这是一个KeyValuePair序列
//仅保留那些值等于RunId的KeyValuePairs
.Where(keyValuePair=>keyValuePair.Value==RunId)
//从其余的keyValuePairs中,选择该键
.选择(keyValuepair=>keyValuepair.Key)
//并将此GUID序列转换为列表:
.ToList();
简单的问候 在循环开始之前,
BatchIDList\u InCase
是否为空?您好,是的,它将在开始时为空