我正在使用VS2012和SQL Compact Edition,我很难创建数据库。我正在尝试使用VS2012中的设计器,但我仍然不能做简单的事情,如定义外键和类似的东西,但我需要快速准备一个Demo,所以我决定将学习留待以后,现在我在我的数据库中只使用一个表(这是一个小项目),我的行数不到500行,所以这不是一个大问题。但是我需要这样做:
我有保单,每个人都有唯一的保单号。但是对于一个政策,客户需要付款时可能会有几个日期。因此,根据我上表中的信息,我说有四行具有不同的ID但具有相同的策略编号和每个记录的不同日期。
我使用MDI Windows Forms,我有一个表单,我显示所有客户的信息,这就是问题所在。如果一个策略有多个日期,或者换言之,我的表中有几个记录,我想只显示即将到来的日期的记录,并且只有当用户点击“详细信息”以显示此保险单的所有日期时。
所以我需要的是通过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
即使这个工作者我仍然不知道如何仅提取最近日期的记录。
答案 0 :(得分:4)
您的查询:
var mainGridInfo = from cs in ctx.MainInfo
where cs.Id != null
group cs by cs.PolicyNumber into test
select test;
返回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>
。
答案 1 :(得分: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};