C#LINQ-比较IEnumerable<;字符串>;对照一份匿名名单
本文关键字:一份 名单 IEnumerable 比较 lt 字符串 C#LINQ- gt | 更新日期: 2023-09-27 18:27:35
的基本问题
我有:
IEnumerable<string> listA
var listB
(这是由LINQ查询生成的匿名列表)
我想查询包含listA
的对象列表,看看它们是否与listB
:匹配
someObjectList.Where(x => x.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
上迭代,并将其添加到SomeObject
的通用List<>
中:
foreach(var item in listGroup)
{
SomeObject so = new SomeObject();
// ...do some stuff
if (some match occurs then add into List<SomeObject>)
}
当我迭代时,我想检查现有的List<SomeOjbect>
是否匹配:
var record = someObjectList.Where(x => x.NAME == item.NAME &&
x.ListOfDates == item.listOfDates)
.SingleOrDefault();
问题是将x.ListOfDates
与item.listOfDates
进行比较是不起作用的。
没有编译器错误,但我怀疑返回的值列表不同。如何使列表通用化以便进行比较?
更新#1
这似乎可以将listOfDates
转换为类似的格式:
IEnumerable<DateTime> tempList = item.listOfDates.Select(x => x.DATE).ToList()
然后我遵循了@Matt Burland 的"SequenceEqual"建议
您只需比较一个IEnumerable<DateTime>
和另一个IEnumerable<DateTime>
,您需要比较序列。幸运的是,这里应该有Enumerable.SequenceEquals(静态和扩展方法风格)。
所以类似于:
var record = someObjectList
.Where(x => x.NAME == item.NAME && x.ListOfDates.SequenceEquals(item.listOfDates))
.SingleOrDefault();