【问题标题】:Linq - Add Row to results for display onlyLinq - 将行添加到结果中仅用于显示
【发布时间】:2009-03-15 00:43:46
【问题描述】:

我有一个 linq 查询,它返回一个简短的订单摘要 - 绑定到数据控件的产品描述和产品价格。我想在显示税收信息的同一个控件中添加要绑定的行。产品描述栏会简单地说“税”,而产品价格栏会给出税额。

我曾经检索这些结果的 DataTable 并简单地执行 NewRow(),然后将我的控件的数据源设置为 DataTable。我正在寻找使用 LINQ to SQL 时的等效技术。谢谢。

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    orderSummary.Union(taxRow)

    【讨论】:

    • 我正在尝试这个并获取方法 'System.Linq.Enumerable.Union(System.Collections.Generic.IEnumerable, System.Collections.Generic. IEnumerable)' 无法从用法中推断出来。尝试明确指定类型参数。
    • 你可能需要做类似 orderSummaries.Union(new List(){new OrderSummary(){ProductDescription="Tax",Amount=taxAmount}}); //同理,将tax行设为OrderSummary的1项列表,并与其余项合并。
    • +1 - 顺便说一句,使用:orderSummaries.Union(new[] {new OrderSummary(){...});对于较短的版本:)
    • +1 我自己也在找这个,几乎从来不需要做一个联合不记得那是我想做的。
    【解决方案2】:

    为了便于在 LINQ 查询结果中添加另一个“行”,您可能需要考虑创建一个类来保存查询结果。然后您可以将结果转换为列表,计算税款,并将税款附加为类的对象。

    public class OrderSummary
    {
        public string Description { get; set; }
        public decimal Amount { get; set; }
    }
    
    
    var taxRate = ...
    var orderSummary = db.Orders.Where( o => o.ID == id )
                                .Select( o => new OrderSummary
                                    {
                                        Description = o.Product
                                                       .Details
                                                       .Description,
                                        Amount = o.Qty * o.Product.Price
                                    })
                                .ToList();
    
    var tax = new OrderSummary
                  {
                      Description = "Tax",
                      Amount = orderSummary.Sum( o => o.Amount * taxRate );
                  };
    orderSummary.Add( tax );
    

    然后您可以使用 Description 作为键和 Amount 作为值将列表绑定到您的控件。

    【讨论】:

    • 这似乎会奏效。一个问题,我从与产品表相关的订单明细表中获取结果,因此为了获得描述,我必须执行 orderSummary.Product.Description = "Tax"。我能做到吗?当我这样添加它时它不起作用。
    • 您是否按照我的描述选择了一个新班级?我将更新我的示例以反映间接性。
    • 目前我有一个返回订单详细信息对象的函数,但如果更简单的话,我可以更改类。
    • 由于您展示的并不是真正的订单详情,我将使用“查看”类方法并创建一个新类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多