Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果条件为,则转换ForEach字典值并将键添加到列表中_C#_Linq - Fatal编程技术网

C# 如果条件为,则转换ForEach字典值并将键添加到列表中

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

我可以知道如何将下面的语句转换为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); 
    }
}
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
是否为空?您好,是的,它将在开始时为空