编译器无法在LINQ查询中评估类型参数

时间:2015-04-05 00:38:10

标签: c# linq

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());
    }
}

AllAssetsAsset类型的列表。

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;
    }
}

1 个答案:

答案 0 :(得分:0)

你的DataComparer不是日期时间的比较器,而是字符串的比较器,你说你的EntryDate已经是一个DateTime,所以使用字符串比较器来比较日期时间是没有意义的,基本上你只需要删除第二个参数

在所有情况下,comparer似乎没有任何用处,最好删除它,因为它不添加任何比较逻辑,它只不过只是在你需要时进行内联解析(并且在这里你不要不需要传递一个传达“我们正在做一些自定义比较”的信息的比较器