LINQ to Entities中不支持指定的类型成员

时间:2012-08-03 17:03:13

标签: c# linq entity-framework-4.1

我正在尝试按照主要政策和子政策(policy.ID,policy.POL2)之间的保险单付款进行分组。理想情况下,我想要最后3笔付款,到期日,付款日期,金额和暂记金额,无论付款是否分开。

如果付款被拆分,我需要将支付的金额与主要政策和子政策相加,但其他三个字段应该相同,所以我不想要重复记录。

我认为这样的事情会起作用,但我得到了一个

  

LINQ to不支持指定的类型成员'PAYDUE'   实体。仅初始化程序,实体成员和实体导航   支持属性。

因为PAYDUE是DateTime。如您所见,我尝试使用内置的EntityFunctions方法,但仍然得到相同的错误

var mc = new ModelContext();
var policy = mc.Polmasts.Find("N400603");
var payments = from p in mc.Paymnts
               where p.POLICY == policy.ID ||
                     p.POLICY == policy.POL2
               orderby p.PAYPD_ descending
               group p by p.PAYPD_
               into g
               select new 
                       {
                           payduedate = EntityFunctions.TruncateTime(g.FirstOrDefault().PAYDUE),
                           paypaiddate = EntityFunctions.TruncateTime(g.FirstOrDefault().PAYPD),
                           paymentamount = g.Sum(a=>a.AMOUNT),
                           paysuspense = g.FirstOrDefault().SUSP
                       };
foreach (var payment in payments)
{
    Console.WriteLine("%=========== \n PAY DUE DATE: {0} \n PAYMENT DATE: {1} \n AMOUNT: {2} \n SUSPENSE: {3}", payment.payduedate, payment.paypaiddate, payment.paymentamount, payment.paysuspense);
}

1 个答案:

答案 0 :(得分:3)

看看this question。我猜PAYDUE不是表模式的一部分?

您可以尝试分离出最终选择,以便在执行选择之前使表格具体化。这样的事情(我还没有测试过它!)

var paymentsRaw = (from p in mc.Paymnts
               where p.POLICY == policy.ID ||
                     p.POLICY == policy.POL2
               orderby p.PAYPD_ descending
               group p by p.PAYPD_).ToList();

var payments = from g in paymentsRaw 
               select new 
                       {
                           payduedate = EntityFunctions.TruncateTime(g.FirstOrDefault().PAYDUE),
                           paypaiddate = EntityFunctions.TruncateTime(g.FirstOrDefault().PAYPD),
                           paymentamount = g.Sum(a=>a.AMOUNT),
                           paysuspense = g.FirstOrDefault().SUSP
                       };