1

我在 ASP.NET MVC4 (Razor View Engine) VS 2012 项目中遇到分组问题。我正在使用实体框架。我的代码如下:

谢谢你的帮助。

我收到错误

Unable to cast object of type 'Grouping[System.String,MyProject.ViewModels.MyViewModel+MyClassData]' to type 'MyClassData'.

我的课

    public class MyClassData
    {
       public int? Id { get; set; }
       public int? ParentId { get; set; }
       public string Title { get; set; }   
    }

    private readonly List<MyClassData> mData = new List<MyClassData>();


    public List<MyClassData> SpecData
    {
      get { return mData; }
    }


    IEnumerable<IGrouping<string, MyClassData>>
    query = (from t in db.MydbProcedure(temp)
                       select new MyClassData
                       {
                          Id = t.Id,
                          ParentId = t.ParentId,
                          Title = t.Title
                       }).OrderBy(x =>x.Id).GroupBy(y => y.Title);

  List<IGrouping<string, MyClassData>> mSpec = query.ToList();

            mData .Clear();
            mSpec.ForEach(b =>
            {
                if (b != null)
                    mData.Add((MyClassData)b);
            });
4

2 回答 2

2
mSpec.ForEach(b =>
            {
                if (b != null)
                    mData.AddRange(b);
            });

编辑:更多内容和质量!耶!

您的代码中的问题是:b没有MyClassData... b 的实例是 IGrouping< K,V> 也是 IEnumerable< V> ... 因为MyClassData在这种情况下 V 是,您可以使用 AddRange(IEnumerable <V> obj) 方法

简而言之...您试图将...的集合用作...MyClassData的单个实例MyClassData

于 2013-11-04T23:24:52.640 回答
1

我无法检查您的代码,但我认为此代码会对您有所帮助:

List<IGrouping<string, MyClassData>> query = new List<MyClassData>()
    .GroupBy(it => it.Title)
    .ToList();

List<MyClassData> mData = query
    .Where(b => b != null)
    .SelectMany(it => it)
    .ToList();

您可以简单地在查询中添加WhereSelectMany子句以获得相同的结果。

我不确定Where您的代码中是否真的需要子句。

我认为您甚至可以编写以下内容:

List<MyClassData> mData = (from t in db.MydbProcedure(temp)
                            select new MyClassData
                            {
                                Id = t.Id,
                                ParentId = t.ParentId,
                                Title = t.Title
                            })
    .OrderBy(it => it.Id)
    .GroupBy(it => it.Title)
    .Where(b => b != null)
    .SelectMany(it => it)
    .ToList();
于 2013-11-04T23:44:02.673 回答