基本问题:
我有:
我想查询包含listA的对象列表,看它们是否与listB匹配:
比较不起作用 - 那么如何确保两个列表的类型相同才能进行比较?
详细问题:
我正在将一个较大的列表分组到一个包含名称和相关日期的子集中。
var listGroup = from n in list group n by new
{ n.NAME } into d
select new
{
NAME = d.Key.NAME, listOfDates = from x in d select new
{ Date = x.DATE } };
我有一个对象来保存值以便进一步处理:
class SomeObject
{
public SomeObject()
{
_listOfDates = new List<DateTime>();
}
private IENumerable<DateTime> _listOfDates;
public IENumerable<DateTime> ListOfDates
{
get {return _listOfDates;}
set {_listOfDates = value;}
}
}
然后我遍历listGroup并添加到通用列表&lt;&gt; SomeObject:
foreach(var item in listGroup)
{
SomeObject so = new SomeObject();
...do some stuff
if(some match occurs then add into List<SomeObject>)
}
当我迭代然后我想检查匹配的现有List:
var record = someObjectList.Where(x => x.NAME == item.NAME && x.ListOfDates == item.listOfDates).SingleOrDefault();
问题是将 x.ListOfDates 与 item.listOfDates 进行比较并不起作用。没有编译器错误,但我怀疑返回的值列表是不同的。如何让列表进行通用以便进行比较?
UPDATE1
这似乎可以使listOfDates变成类似的格式:
IENumberable<DateTime> tempList = item.listOfDates.Select(x => x.DATE).ToList()
然后我按照&#39; SequenceEqual&#39;来自@Matt Burland的建议
答案 0 :(得分:1)
您只需将一个IEnumerable<DateTime>
与另一个IEnumerable<DateTime>
进行比较,就需要比较序列。幸运的是,Enumerable.SequenceEquals(在静态方法和扩展方法中都有)可以在这里工作。
类似于:
var record = someObjectList
.Where(x => x.NAME == item.NAME && x.ListOfDates.SequenceEquals(item.listOfDates))
.SingleOrDefault();