Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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#中使用Linq和字典?_C#_Linq_Dictionary - Fatal编程技术网

如何从列表中获取元素<&燃气轮机;在查询C#中使用Linq和字典?

如何从列表中获取元素<&燃气轮机;在查询C#中使用Linq和字典?,c#,linq,dictionary,C#,Linq,Dictionary,模型如下: public class Word { public Dictionary<string, string> Langs { get; set; } } 我不想每次都手动键入“en”、“pl”键,所以我需要以某种方式将其自动化,就像这样: // use foreach for validate words List<Word> validWords_2 = new List<Word>(); foreach(Word word in wo

模型如下:

public class Word
{
    public Dictionary<string, string> Langs { get; set; }
}
我不想每次都手动键入“en”、“pl”键,所以我需要以某种方式将其自动化,就像这样:

// use foreach for validate words
List<Word> validWords_2 = new List<Word>();

foreach(Word word in wordsList)
{
    bool isWordValid = true;

    foreach(string lang in langsToUse)
    {
        if(word.Langs[lang] == ""){
            isWordValid = false;
        }
    }

    if(isWordValid) {
        validWords_2.Add(word);
    }
}
var validWords = wordsList
    .Where(word => langsToUse.All(lang => word.Langs[lang] != ""))
    .ToList();
//使用foreach验证单词
List validWords_2=新列表();
foreach(单词列表中的单词)
{
bool-isWordValid=true;
foreach(langsToUse中的字符串lang)
{
if(word.Langs[lang]==“”){
isWordValid=false;
}
}
如果(isWordValid){
有效字数2.加(字);
}
}

但我认为,如果有某种方法可以通过使用Linq和字典来实现自动化,那么这种自动化可能会更简单。

如果我理解正确,您可以尝试使用Linq
join

List<string> keyList = new List<string> { "key_01", "key_02" };
var dictionary_name = new Dictionary<string, string>()
            {
                {"key_01", "val_01"},
                {"key_02", "val_02"}
            };
var results = from i in keyList
            join k in dictionary_name on i equals k.Key
            select i;

您可以使用LINQ简化验证代码,如下所示:

// use foreach for validate words
List<Word> validWords_2 = new List<Word>();

foreach(Word word in wordsList)
{
    bool isWordValid = true;

    foreach(string lang in langsToUse)
    {
        if(word.Langs[lang] == ""){
            isWordValid = false;
        }
    }

    if(isWordValid) {
        validWords_2.Add(word);
    }
}
var validWords = wordsList
    .Where(word => langsToUse.All(lang => word.Langs[lang] != ""))
    .ToList();
小提琴:

以上假设所有
Langs
词典将包含
langsToUse
中每种语言的一个键。如果不是这样,则应使用
TryGetValue

var validWords = wordsList
    .Where(word => langsToUse.All(
                   lang => word.Langs.TryGetValue(lang, out string w) && w != ""))
    .ToList();

您已经告诉我们您实际想要做什么,只是一些没有意义的代码,请说明您的预期结果,并提供一些有意义的输入更新描述
var validWords = wordsList
    .Where(word => langsToUse.All(lang => word.Langs[lang] != ""))
    .ToList();
var validWords = wordsList
    .Where(word => langsToUse.All(
                   lang => word.Langs.TryGetValue(lang, out string w) && w != ""))
    .ToList();