我有一个列表复杂对象itemofsamestartDate
表示它有itemofsamestartDate[0],itemofsamestartDate[1],itemofsamestartDate[2]....
等等。 itemofsamestartDate [i]具有startDate属性。如果所有列表具有相同的开始日期,我想写一个LINQ查询以返回True
。
在查询下方,我试过了 -
var itemofsamestartDate = from aIndex in Enumerable.Range(0, itemOfSinglePrority.Count())
from b in itemOfSinglePrority.Skip(aIndex + 1)
let a = itemOfSinglePrority.ElementAt(aIndex)
where a != b && a.StartDate == b.StartDate
select new
{
object1 = a,
object2 = b
};
现在我正在检查itemofsamestartDate
计数是否大于0,然后它具有相同的开始日期,但如果我的列表数仅为2,则上述工作正常,即itemofsamestartDate [0]& itemofsamestartDate [1]。
LINQ查询应该检查列表是否具有相同的startdata(DateTime数据类型)。
答案 0 :(得分:0)
检查这一点的可读方式可以是:
bool allEqual=false;
if(itemofsamestartDate != null && itemofsamestartDate.Count()>0) {
int countEqual = itemofsamestartDate
.Count(x => x.StartDate == itemofsamestartDate[0].StartDate);
int count = itemofsamestartDate.Count();
allEqual = countEqual == count;
}
一种不太可读的方式:
bool allEqual=false;
if(itemofsamestartDate != null && itemofsamestartDate.Count()>0)
allEqual = itemofsamestartDate.Count(x => x.StartDate == itemofsamestartDate[0].StartDate) == itemofsamestartDate.Count();
您还可以按StartDate
对列表进行分组,然后检查是否只有一个组。
答案 1 :(得分:0)
类ItemOfStartDate具有属性StartDate。 您有此类的一系列对象,并且您想知道此序列中的所有对象是否具有相同的StartDate值。
换句话说,您想知道StartDate是否只有一个值。
如果序列为空,你没有提到你想要的东西。我们假设空列表中的所有StartDates都相等
IEnumerable<ItemOfStartDate> myItems = ...
bool onlyOneStartDates = !myItems // from every element in my sequence
.Select(item => item.StartDate) // take the value of StartDate
.Distinct(); // and remove duplicates
.Skip(1)
.Any(); // true if we have more than 1 left
如果您想更频繁地检查唯一性,请考虑创建扩展方法:
static class EnumerableExtensions
{
public static bool IsUnique<TSource, TKey>(this TSource source,
Func<TSource, TKey> propertySelector)
{
return !source.Select(propertySelector)
.Distinct()
.Skip(1)
.Any();
}
}
用法:
IEnumerable<ItemOfStartDate> myItems = ...
bool onlyOneStartDates = IsUnique(item => item.StartDate);
如果需要,您可以添加一个重载IEqualityComparer以在Distinct
中使用