使用Lambda将派生属性插入IQueryable数据集

时间:2016-08-18 17:57:05

标签: c# asp.net lambda

我有以下查询:

IQueryable<BarcodeQuery> barcodes = db.Barcodes.Select(b => new BarcodeQuery
{
    id = b.id,
    category_id = b.category_id,
    ...
    checkout = b.Checkouts.Select(c => new CheckoutChild
    {
        id = c.id,
        loanee_id = c.loanee_id,
        ...
    })
    .Where(c => c.datein == null)
    .FirstOrDefault()
});

等等。它基于这个模型:

public class BarcodeQuery
{
    public int id { get; set; }
    public int category_id { get; set; }
    ...
    public CheckoutChild checkout { get; set; }
    public CheckoutStatus checkoutStatus { get; set; }
}

我的问题是关于底部的CheckoutStatus。它看起来像这样:

public class CheckoutStatus
{
    public string status { get; set; }
    public int daysUntilDue { get; set; }
    public int daysOverdue { get; set; }
}

所有这些值都来自我从查询中获得的信息 - 它们都不在数据库本身中。将CheckoutStatus值插入每个barcode记录的最佳方法是什么?

我有一个自己创建CheckoutStatus值的函数,我只是不知道如何将它们放入barcode记录中。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果b刚刚使用new创建,b.Checkouts如何包含某些内容?我并没有真正了解你的目标。

EF正在将lambda表达式转换为SQL语句。因此,您只能使用实际可以转换为SQL的表达式。只需查询数据库中的条形码,然后将缺少的信息添加到循环中返回的条形码中。

var barcodes = db.Barcodes.Select(...).ToList();
foreach (Barcode b in barcodes) {
    b.Checkouts = ...
}