在asp.net mvc中分组并取1个类对象

时间:2015-10-16 05:39:49

标签: c# linq asp.net-mvc-5

public static IQueryable<ProBE> GetAllPol()
        {
            ConnectionString CS = new ConnectionString();
            var pol = (from pol in CS.pols
                            select new ProBE
                            {
                                Id = pol.Id,
                                Name = pol.Name,
                                Weight = pol.Weight,
                                EnID = pol.EnID,
                                PolID = pol.PolID
                            }).GroupBy(c=>c.PolID).Take(1);
            return pol;
        }

以上是我的代码,它与Devexpress网格绑定。我将在CS.pols的{​​{1}}表中的数据库中有两个或更多条目。我希望按DB进行分组,因为只有此字段在不同版本中保持相同。我想PolIDgroup by。我收到错误消息,指出无法将take 1转换为IQueryAble。请帮助我如何获得所需的数据。

1 个答案:

答案 0 :(得分:1)

您的第一个问题,因为您最后会GroupBy,它将返回IEnumerable<IGrouping<T>>,以便永远不会转换为IQueryable<ProBE>。因此,您需要先将其分组,然后再进行投影。

下一个问题是Take,它会返回IEumerable<T>,但您只需要分组后的第一个项目,所以请改用FirstOrDefault: -

var pol = (from pol in CS.pols
           group pol by pol.PolID into g
           let firstgroupedPol = g.OrderByDescending(x => x.Id).FirstOrDefault()
           select new ProBE
                 {
                   Id = firstgroupedPol != null ? firstgroupedPol.Id : 0,
                   Name = firstgroupedPol != null ? firstgroupedPol.Name : "",
                   //similarily others
                   PolID = g.Key
                 });