1

我有一张发票表。我的服务层知道如何计算一张发票Total的发票,但如果我想按 过滤一组发票Total,LINQ 查询将失败,因为“SQL 中不支持翻译”。发生这种情况是因为无法对每个发票记录执行嵌套查询。解决它的正确方法是什么?

每张发票都是通过对涉及折扣Total的表中计算的行总计求和来确定的,字面意思是:InvoiceLines

public decimal Total
{
    get
    {
        return Lines.Sum(l => l.LineTotal); // Lines provided by repository
    }
}

我不想在我的数据库中复制已经在我的服务层中的业务逻辑,这涉及对影响发票总额的行项目进行折扣。Total但是除了将发票缓存在可以直接过滤的数据库列中之外,我没有看到任何其他方法。

发票是不可变的,因此不会导致任何数据完整性问题,但我讨厌重复数据。我可以使用视图来显示发票总额,但是我的存储库正在执行服务层功能。

4

2 回答 2

0

Total 是 LINQ 实体的附加属性吗?如果是,则不能使用 Total 属性;这是特别不支持的。很难将重用逻辑全部放在针对数据库的 LINQ 查询中... ,之后的所有处理都将使用 LINQ to Objects,您可以做任何您想做的事情。

HTH。

于 2010-11-02T15:34:09.660 回答
0

解决了:

  1. 在我的模型中添加了一个缓存的总值,我可以设置(从而缓存它)或从模型的延迟加载项中计算总值。
  2. 在我的数据库中添加了一个视图来计算总数,这是我的业务逻辑中已经存在的逻辑重复。但它有效。
  3. 将视图的总值绑定到我的模型,设置缓存的总值。

Now I can filter my data on totals, which are calculated by the database and cached in my models.

于 2010-11-22T18:41:09.560 回答