Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
Linq列表包含特定的值_Linq - Fatal编程技术网

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);