【问题标题】:Dynamic values in linq query by other field and boolean value其他字段和布尔值在linq查询中的动态值
【发布时间】:2015-08-19 18:37:26
【问题描述】:
var results = 
    (from p in DBContext.Sources
    orderby p.AccountTypeId
    group p by new { p.AccountTypeId } into g
    select new ObjectItem
    {
        AccountTypeId = g.Key.AccountTypeId,
        Packages = 
            (from pkg in g
            group pkg by new
            {
                pkg.PackageId,
                pkg.Enabled
            } into pg
            select new ATSourcePackageItem
            {
                PackageId = pg.Key.PackageId,
                DisplayName = pg.Key.DisplayName,
                CategoryId = pg.Key.DisplayCategoryId,
                Prices = 
                    (from pr in pg
                    group pr by new { pr.Fpt, pr.Price } into prg
                    select new ATSourcePriceItem
                    {
                        FPT = prg.Key.Fpt,
                        Amount = prg.Key.Price
                    })
            })
    }).ToList();

CategoryId 等于 7 并且条件为真时,我想将 Amount 减去 10。

是否可以在此 linq 查询中以某种方式执行此操作,因为 Amount 对象没有设置器,这是我可以编辑值的唯一地方。

例如,如果我执行以下操作:

Amount = prg.Key.Price - 10

我能够得到我想要的值,但我还想为特定类别设置它,如果布尔值为 true。

【问题讨论】:

  • “Amount 对象没有设置器”那么您如何在此查询中设置它?它是一个构造函数参数吗?

标签: c# linq entity-framework linq-to-sql linq-to-entities


【解决方案1】:

你可以在这里使用三元运算符:

//Amount = prg.Key.Price
Amount = (pg.Key.DisplayCategoryId == 7 && your_boolean_here) ? 
    prg.Key.Price - 10 : prg.Key.Price

【讨论】:

    【解决方案2】:

    如果你能做到:

    Amount = prg.Key.Price - 10
    

    你也可以这样做:

    Amount = {bool expression} ? prg.Key.Price - 10 : prg.Key.Price
    

    或者只是

    Amount = prg.Key.Price - ({bool expression} ? 10 : 0)
    

    【讨论】:

    • 谢谢 D,但另一个答案是我需要的答案,它包括条件和类别 ID。祝你有美好的一天
    • @Laziale 不用担心 - 很高兴你得到了你需要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多