1

我正在使用 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;
            }

所以有了这个我尝试这样使用group by

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

但后来我将此标记为错误: IList mainGridInfoList =mainGridInfo.ToList<MainInfo>();

错误是:

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

即使这个工人我仍然不知道如何只提取最近日期的记录。

4

2 回答 2

4

您的查询:

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

return IQueryable<IGrouping<string, MainInfo>>,所以你不能调用ToList<MainInfo>它!

根据您的要求:

因此,我需要按 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<MainInfo>,所以你应该可以调用ToList<MainInfo>它。

于 2013-08-11T16:01:16.107 回答
0

尝试类似的东西

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};
于 2013-08-11T16:02:01.773 回答