【发布时间】:2018-03-13 15:03:49
【问题描述】:
鉴于这两个对象:
public class Foo{
public string Result {get;set;}
public List<Bar> Bars {get;set;}
}
public class Bar{
public string Left {get;set;}
public string Right {get;set;}
}
这些实例如下所示:
List<Foo> myFoos = new List<Foo>()
{
new Foo { Bars = new List<Bar>
{
new Bar { Left = "myLeft1", Right = "myValue1"},
new Bar { Left = "myLeft2", Right = "myValue2"}
},
Result = "TheWinningResult"},
new Foo { Bars = new List<Bar>
{
new Bar { Left = "myLeft2", Right = "myValue2"},
new Bar { Left = "myLeft3", Right = "myValue3"}
},
Result = "TheLosingResult"},
new Foo{ Bars = new List<Bar>
{
new Bar { Left = "myLeft1", Right = "myValue1"},
new Bar { Left = "myLeft2", Right = "myValue2"},
new Bar { Left = "myLeft3", Right = "myValue3"}
},
Result = "TheOtherLosingResult"},
};
List<Bar> bars = new List<Bar>()
{
new Bar{ Left = "myLeft1", Right = "myValue1" },
new Bar{ Left = "myLeft2", Right = "myValue2" }
};
我正在尝试查找 FirstOrDefault() Foo 其中 Foo.Bars 与 bars 完全匹配
在这种情况下,我试图返回Foo,而Result 是“TheWinningResult”
我尝试了以下方法:
Foo foo = myFoos.Where(t => t.Bars.All(t2 => bars.Contains(t2))).FirstOrDefault();
Foo foo = myFoos.Where(t => bars.All(r => t.Bars.Contains(r))).FirstOrDefault();
Foo foo = myFoos.FirstOrDefault(t => t.Bars.Any(r => bars.All(ru => ru.Left == r.Left && ru.Right == r.Right)));
知道我哪里出错了吗?
更新
我忘了说,Foo 中的Bars 的顺序应该不重要。
【问题讨论】:
-
myFoos.FirstOrDefault(x => x.Bars.SequenceEqual(bars));msdn.microsoft.com/en-us/library/bb348567(v=vs.110).aspx -
@RandRandom - 对我不起作用,谢谢。
-
你确实覆盖了
Equals- 假设? -
@RandRandom - 不。我没有。
-
我没有对自己投反对票,但该示例在不进行更改的情况下无法编译。
Foo缺少对Result的定义,并且大括号和初始化Bar存在其他问题。