class Program
{
static void Main(string[] args)
{
List<string> lista = new List<string>()
{
"a",
"b",
"c",
"d",
"e",
"f"
};
lista.Where(l1 => Enum.GetNames(typeof(prova)).Any(l2 => l2.Equals(l1))).ToList().ForEach(l => Console.WriteLine(l));
Console.ReadLine();
}
}
public enum prova
{
a,
b,
c
}
我正在使用C#和EF
用
Any(l2 => l2.Equals(l1))
我在输出中得到a,b,c
使用
Any(l2 => !l2.Equals(l1))
我在输出中得到a,b,c,d,e,f
我期待着d,e,f
发生了什么事?
答案 0 :(得分:0)
你几乎拥有它,只是否定你的条件。试试这个。
lista.Where(l1 => !Enum.GetNames(typeof(prova)).Any(l2 =>l2.Equals(l1)));
答案 1 :(得分:0)
它完成了你所说的:对于列表中的每个元素,至少有一个与该元素不相等的枚举值。
您可能想要做的事情(选择不在枚举中的那些)是:
var result = lista.Where(l1 => Enum.GetNames(typeof(prova)).All(l2 => !l2.Equals(l1))).ToList()
找到所有枚举值不相等的元素。
答案 2 :(得分:0)
发生了什么
Any(l2 => !l2.Equals(l1))
就是这样,你总是得到true
。因为lista
中的当前元素始终不等于枚举prova
中的某个元素。在!l2.Equals(l1)
上添加一个断点,您就会知道更多!
如果您打算从lista
获取除枚举provea
以外的所有元素,您应该尝试
var enumNames = Enum.GetNames(typeof(prova));
lista.Where(l1 => !enumNames.Contains(l1)).ToList().ForEach(l => Console.WriteLine(l));