我正在尝试构建一个 lambda 表达式,它将一个数组的元素与第二个数组的元素进行匹配。以下是此查询的简化版本:
class Program
{
static void Main(string[] args)
{
string[] listOne = new string[] { "test1", "test2", "test3" };
MyClass[] listTwo = new MyClass[] { new MyClass("test1") };
string[] newVals = listOne.Where(p => listTwo.Select(e => e.Name).Equals(p)).ToArray();
//string[] newVals2 = listOne.Intersect(listTwo.Select(t => t.Name)).ToArray();
}
class MyClass
{
public MyClass(string name)
{
Name = name;
}
public string Name {get; set;}
}
}
我希望 newVals
返回一个值为 1 的数组,但它是空的。我意识到取消注释 myVals2 会获得相同的结果,但类列表的根本差异比显示的要大。
最佳答案
您正在使用 Equals
但你应该使用 Contains
.您正在检查是否IEnumerable<>
等于p
, 但你想检查是否 IEnumerable<>
包含 p
,所以替换:
string[] newVals = listOne.
Where(p => listTwo.Select(e => e.Name).Equals(p)).
ToArray();
与
string[] newVals = listOne.
Where(p => listTwo.Select(e => e.Name).Contains(p)).
ToArray();
关于c# - Lambda 表达式未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525706/