如何从列表中获取元素<&燃气轮机;在查询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();