Linq列表包含特定的值
我需要知道我正在处理的列表是否只包含一些特定值Linq列表包含特定的值,linq,Linq,我需要知道我正在处理的列表是否只包含一些特定值 var list = new List<string> { "First", "Second", "Third" }; 但是,如何编写一个Linq表达式,使其仅在列表包含“First”和“Second”值时返回true/false?我不完全确定您想要什么,但如果您想确保“First”和“Second”只表示一次,您可以执行以下操作: var result = list.Where(l => l == "First" || l =
var list = new List<string> { "First", "Second", "Third" };
但是,如何编写一个Linq表达式,使其仅在列表包含“First”和“Second”值时返回true/false?我不完全确定您想要什么,但如果您想确保“First”和“Second”只表示一次,您可以执行以下操作:
var result = list.Where(l => l == "First" || l =="Second")
.Distinct()
.Count() == 2;
或:
如果您有更长的“白名单”,您可以:
var result = !whiteList.Except(list).Any();
另一方面,如果您希望确保列表中的所有项目都来自白名单,并且白名单中的每个项目至少表示一次,我将执行以下操作:
变量集=新哈希集(列表);
set.SymmetricExceptWith(白名单);
var结果=!set.Any();
编辑:实际上,Jon Skeet的
SetEquals
是表达最后一位的更好方法。您可以使用Intersect
查找匹配项:
var list = new List<string> { "First", "Second", "Third" };
var comparelist = new List<string> { "First", "Second" };
var test = list.Intersect(comparelist).Distinct().Count() == comparelist.Count();
var list=新列表{“第一”、“第二”、“第三”};
var comparelist=新列表{“第一”、“第二”};
var test=list.Intersect(comparelist).Distinct().Count()==comparelist.Count();
您的问题不清楚
从第一句话开始,我希望这就是你想要的:
var onlyValidValues = !list.Except(validValues).Any();
换句话说:去掉有效值后,列表应该为空
从最后一句话中,我想:
var validSet = new HashSet<string>(requiredValues);
var allAndOnlyValidValues = validSet.SetEquals(candidateSequence);
var validSet=新哈希集(requiredValues);
var allAndOnlyValidValues=validSet.SetEquals(候选序列);
请注意,如果候选序列多次包含相同的值,此选项仍然有效
如果你能明确你的成功标准是什么,那么回答这个问题就更容易了。如果我在这里写下这样的话会发生什么:list=newlist{“First”、“First”、“Second”}它会返回真值吗?@Raffaeu:是的,我提供的所有3个样本都会返回真值。谢谢,我会试一试,我个人喜欢第一种语法,它更简单SQLish@Raffaeu:请查看我的编辑-基本上,您的问题目前可以以非常不同的方式阅读。
var onlyValidValues = !list.Except(validValues).Any();
var validSet = new HashSet<string>(requiredValues);
var allAndOnlyValidValues = validSet.SetEquals(candidateSequence);