【问题标题】:Select multiple columns from Linq query从 Linq 查询中选择多列
【发布时间】:2017-01-27 13:08:11
【问题描述】:

我有两张桌子。客户和客户利益。

每个表中的字段

Customer - ID, Name, Address, Country etc
CUstomerBenefits -  CustomerID, BenefitID (Both IDs have a relation to their relevant tables)

我正在尝试列出客户并获取福利详情

    IEnumerable<CustomerBenefit> GetData = from c in MyContext.CUstomerBenefits
                                                   where c.CustomerId == UserId & c.Active = true
                                                   orderby c.CustomerBenefit.BenType descending
                                                   select new {???? };

对于Select,我试过了

select new {c.Benefit.Name }

但得到错误

无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(您是否缺少演员表?)

如果我将IEnumerable&lt;CustomerBenefit&gt; 更改为IEnumerable&lt;dynamic&gt;,我不会收到任何错误,但是当数据绑定到我的gridview 时,我会收到找不到字段的错误。

我如何保留IEnumerable&lt;CustomerBenefit&gt; 并选择我需要的列?

【问题讨论】:

    标签: c# asp.net linq linq-to-sql


    【解决方案1】:

    你写道:

    CUstomerBenefits - CustomerID、BenefitID(两个 ID 都与 他们的相关表格)

    我将此解释为意味着有一个表CustomerBenefit 包含好处,而CUstomerBenefits 表又是客户和好处之间的链接。现在您想获得一个特定客户拥有的所有好处的列表吗?

    这应该可以解决问题:

    IEnumerable<CustomerBenefit> GetData =
        from c in MyContext.CUstomerBenefits
        where c.CustomerId == UserId && c.Active == true
        orderby c.CustomerBenefit.BenType descending
        select c.CustomerBenefit;
    

    【讨论】:

      【解决方案2】:

      使用:select c 获取所有列值或:

      select new CustomerBenefit {CustomerID = c.CustomerID};等

      【讨论】:

        【解决方案3】:
        var HOQuotePremiums = (from holoc in objRes.ResHO.HOLocations
                                                       from cst in ((HOLocation)holoc).HOBuildings
                                                       select new
                                                       {
                                                           RequestId = cst.HOPremium.RequestId,
                                                           BasePremium = Convert.ToInt32(cst.HOPremium.BasePremium),
                                                           PersonalLiabilityPremium = cst.HOPremium.PersonalLiabilityPremium,
                                                           MedicalPaymentPremium = cst.HOPremium.MedicalPaymentPremium,
                                                           FinalPremium = objRes.ResHO.FinalPremium,
                                                           WithoutAOPDeductibleFinalPremium = cst.HOPremium.WithoutAOPDeductibleFinalPremium,
                                                           SubTotalPremium = objRes.ResHO.FinalPremiumWithoutFeeTax,
                                                           LocationID = holoc.LocationID,
                                                           BuildingID = cst.BuildingID,
                                                           IsMinimumPremium = cst.HOPremium.IsMinimumPremium,
                                                           MinimumPremium = cst.HOPremium.MinimumPremium,
                                                           SubTotalPremiumWithoutMinimumPremium = cst.HOPremium.SubTotalPremiumWithoutMinimumPremium,
                                                           FinalRate=cst.HOPremium.FinalRate,
                                                       }).ToList();
        

        请试试这个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多