LINQ查询应该按日期的月份和年份对列表进行分组,然后按日期对子组进行排序。编译器告诉我它不能评估类型参数,我非常混淆所有的IGrouping,IOrderedEnumerable,IEnumerable,我无法评估它们......
问题出现在groupedList.OrderBy(...)
行中。
public IOrderedEnumerable<IGrouping<String, Asset>> DateAssetList
{
get
{
return AssetManager.Instance.AllAssets.
GroupBy(asset => ConverterHelper.GetMonthNameByIndex(asset.EntryDate.Month) + " " + asset.EntryDate.Year).
Select(groupedList => groupedList.OrderBy(asset => asset.EntryDate, new DateComparer())).
OrderBy(group => group.Key, new DateComparer());
}
}
AllAssets
是Asset
类型的列表。
EntryDate
的类型为DateTime
。
第一个GroupBy
语句基本上按月和年分组所有资产(例如2015年3月)。现在我的任务是对2015年3月子组中的所有资产进行排序,但我无法使查询正常工作。
有人可以为我解决这个谜题吗?
编辑:添加了DateComparer类
public class DateComparer : IComparer<String>
{
public int Compare(string x, string y)
{
if (DateTime.Parse(x) > DateTime.Parse(y))
return -1;
if (DateTime.Parse(x) < DateTime.Parse(y))
return 1;
return 0;
}
}
答案 0 :(得分:0)
你的DataComparer不是日期时间的比较器,而是字符串的比较器,你说你的EntryDate已经是一个DateTime,所以使用字符串比较器来比较日期时间是没有意义的,基本上你只需要删除第二个参数
在所有情况下,comparer似乎没有任何用处,最好删除它,因为它不添加任何比较逻辑,它只不过只是在你需要时进行内联解析(并且在这里你不要不需要传递一个传达“我们正在做一些自定义比较”的信息的比较器