【问题标题】:Linq query not handled by Entity Framework [duplicate]实体框架未处理 Linq 查询 [重复]
【发布时间】:2018-02-13 15:35:54
【问题描述】:

我一直在搜索 LINQ to Entities 不识别方法 主题,这些主题被广泛讨论。听起来我的 C# 代码无法转换为 Entity 处理的查询...问题是我对这个框架不够好,无法理解它真正是如何工作的。 谁能帮我理解为了修复我的代码必须改变什么?

我正在选择受益人(个人/公司)并关联他们的姓名。

代码如下:

 var context = Context as OracleDataContextCommon;
            List<Dictionary<Beneficiary, string>> BeneficiaryList = new List<Dictionary<Beneficiary, string>>();
            Dictionary<Beneficiary, string> BeneficiaryPerson = new Dictionary<Beneficiary, string>();
            Dictionary<Beneficiary, string> BeneficiaryCompany = new Dictionary<Beneficiary, string>();

            //Let's select all persons that are not listed as Health Partner
            BeneficiaryPerson = (from bnf in context.Beneficiary
                         where bnf.HmcBen == 0
                         from pers in context.Person
                         where pers.PersonId == bnf.PerId
                         orderby pers.Lastname
                         group new { bnf, pers } by new { bnf.LUP_DATE,  pers.PersonId} into grp
                         let earliest = grp.Max(o => o.bnf.LUP_DATE)
                         select new
                         {
                             beneficiary = grp.Where(x => x.bnf.LUP_DATE == earliest).Select(x => x.bnf).FirstOrDefault(),
                             name = string.Format("{0} {1}", grp.Select(x => x.pers.Firstname).FirstOrDefault(), grp.Select(x => x.pers.Lastname).FirstOrDefault())
                         })
                         .ToDictionary(x => new Beneficiary() {
                             BnfId = x.beneficiary.BnfId,
                             CodeBic = x.beneficiary.CodeBic,
                             IbanCode = x.beneficiary.IbanCode,
                             PerId = x.beneficiary.PerId,
                             BnkId = x.beneficiary.BnkId,
                             HmcBen = x.beneficiary.HmcBen
                         }, x => x.name);

            //Let's select all companies that are not listed as Health Partner
            BeneficiaryCompany = (from bnf in context.Beneficiary
                                where bnf.HmcBen == 0
                                from cie in context.Company
                                where cie.CompanyId == bnf.CieId
                                orderby cie.CompanyName
                                group new { bnf, cie } by new { bnf.LUP_DATE, cie.CompanyId} into grp
                                let earliest = grp.Max(o => o.bnf.LUP_DATE)
                                select new
                                {
                                    beneficiary = grp.Where(x => x.bnf.LUP_DATE == earliest).Select(x => x.bnf).FirstOrDefault(),
                                    name = grp.Select(x => x.cie.CompanyName).FirstOrDefault()
                                })
                                .ToDictionary(x => new Beneficiary(){
                                    BnfId = x.beneficiary.BnfId,
                                    CodeBic = x.beneficiary.CodeBic,
                                    IbanCode = x.beneficiary.CodeBic,
                                    CieId = x.beneficiary.CieId,
                                    BnkId = x.beneficiary.BnkId,
                                    HmcBen = x.beneficiary.HmcBen
                                }, x => x.name );

            BeneficiaryList.Add(BeneficiaryPerson);
            BeneficiaryList.Add(BeneficiaryCompany);

            return BeneficiaryList;

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    Entity Framework / Linq to Sql 无法将String.Format 转换为 SQL.. 总之,除非你知道你在内存中,否则不要使用它

    【讨论】:

    • 确实,框架不能处理'string.Format'...谢谢老兄! :-)
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2018-11-16
    • 2011-12-06
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多