C# LINQ到实体分组依据,然后选择最小值

C# LINQ到实体分组依据,然后选择最小值,c#,.net,linq,linq-to-entities,C#,.net,Linq,Linq To Entities,我使用的是VS2012和SQL Compact Edition,我很难创建数据库。我试图使用VS2012中的设计器,但我仍然无法完成定义外键之类的简单工作,但是我需要尽快准备一个演示,所以我决定以后再学习,现在我只处理数据库中的一个表,这是一个小项目,我只有不到500行,所以问题不大。但是,我需要这样做: 我有保险单,每个人都有唯一的保险单编号。但对于一项政策,客户可能需要在几个日期付款。因此,根据我的表中的上述信息,我假设有四行具有不同的ID,但每个记录具有相同的策略编号和不同的日期 我使用M

我使用的是VS2012和SQL Compact Edition,我很难创建数据库。我试图使用VS2012中的设计器,但我仍然无法完成定义外键之类的简单工作,但是我需要尽快准备一个演示,所以我决定以后再学习,现在我只处理数据库中的一个表,这是一个小项目,我只有不到500行,所以问题不大。但是,我需要这样做:

我有保险单,每个人都有唯一的保险单编号。但对于一项政策,客户可能需要在几个日期付款。因此,根据我的表中的上述信息,我假设有四行具有不同的ID,但每个记录具有相同的策略编号和不同的日期

我使用MDI Windows窗体,我有一个窗体,其中显示所有客户端的信息,问题来了。如果一份保单有多个日期,或者换句话说,在我的表中有多条记录,我只想显示带有即将到来日期的记录,并且仅当用户单击“详细信息”以显示此保单的所有日期时

因此,我需要的是查询表组,根据PolicyNumber对结果进行分组,并针对每个具有多个日期的策略,使用最新日期记录结果

现在我有这个:

 using (RalBaseEntities ctx = new RalBaseEntities())
            {
                var mainGridInfo = from cs in ctx.MainInfo
                                   where cs.Id != null
                                   select cs;

                IList<MainInfo> mainGridInfoList = mainGridInfo.ToList<MainInfo>();
                dgvClients.DataSource = mainGridInfoList;
            }
但随后我将其标记为错误:IList mainGridInfoList=mainGridInfo.ToList

错误是:

Error   1   'System.Linq.IQueryable<System.Linq.IGrouping<string,SHAdmin.MainInfo>>' does not contain a definition for 'ToList' and the best extension method overload 'System.Linq.ParallelEnumerable.ToList<TSource>(System.Linq.ParallelQuery<TSource>)' has some invalid arguments  C:\Users\X-Man\Desktop\SHAdmin\SHAdmin\Forms\Clients.cs 44  52  SHAdmin
即使这个工人,我仍然不知道如何只提取最近日期的记录。

您的查询:

var mainGridInfo = from cs in ctx.MainInfo
                   where cs.Id != null
                   group cs by cs.PolicyNumber into test
                   select test;
返回IQueryable,因此您不能在其上调用ToList

根据您的要求:

所以我需要的是查询表,按PolicyNumber将结果分组 对于每个具有多个日期的保单,记录 最近的日期

我想你在寻找:

var mainGridInfo = from cs in ctx.MainInfo
                   where cs.Id != null
                   group cs by cs.PolicyNumber into test
                   select test.OrderByDescending(cs => cs.Date).First();
它将返回IQueryable,因此您应该能够在其上调用ToList。

您的查询:

var mainGridInfo = from cs in ctx.MainInfo
                   where cs.Id != null
                   group cs by cs.PolicyNumber into test
                   select test;
返回IQueryable,因此您不能在其上调用ToList

根据您的要求:

所以我需要的是查询表,按PolicyNumber将结果分组 对于每个具有多个日期的保单,记录 最近的日期

我想你在寻找:

var mainGridInfo = from cs in ctx.MainInfo
                   where cs.Id != null
                   group cs by cs.PolicyNumber into test
                   select test.OrderByDescending(cs => cs.Date).First();
它将返回IQueryable,因此您应该能够在其上调用ToList

var mainGridInfo = from cs in ctx.MainInfo
                                   where cs.Id != null
                                   group cs by cs.PolicyNumber into test
                                   select new { Key = test.Key, MainInfo = test};
试试像这样的东西

var mainGridInfo = from cs in ctx.MainInfo
                                   where cs.Id != null
                                   group cs by cs.PolicyNumber into test
                                   select new { Key = test.Key, MainInfo = test};

我认为这个问题不应该如此冗长。只需发布您想要的内容和一段您尝试过的代码。如果您没有指定类型,只需列出,您就可以成功运行它,然而,这是一个可能不是你真正想要的列表。我一直在暗中希望有人能给我一些好地方的提示,在那里我可以找到关于如何使用VS2012和SQL CE设计数据库的教程。我有几个项目,但总是先使用MS SQL 2008+ADO.NET EF和代码,现在我发现我缺乏很多基础知识。相关:我认为这个问题不应该这么长。只需发布您想要的内容和一段您尝试过的代码。如果您没有指定类型,只需列出,您就可以成功运行它,然而,这是一个可能不是你真正想要的列表。我一直在暗中希望有人能给我一些好地方的提示,在那里我可以找到关于如何使用VS2012和SQL CE设计数据库的教程。我有几个项目,但总是先使用MS SQL 2008+ADO.NET EF和代码,现在我发现我缺乏很多基础知识。相关:它正是我所需要的。Just-要获取最近的日期,它应该是test.OrderBycs=>cs.date,当我获取最新日期时。谢谢。这正是我需要的。Just-要获取最近的日期,它应该是test.OrderBycs=>cs.date,当我获取最新日期时。谢谢