EF联合和计数查询

时间:2015-07-27 11:47:05

标签: entity-framework

我有下面的sql命令,我怎样才能翻译成ef查询?

 SELECT SUM(T1) 
                               FROM
                               (
                               SELECT COUNT(*) T1 FROM PRODUCTS.[PRODUCT] t WHERE t.TXDATE BETWEEN '2015-06-01' AND '2015-06-02'
                               UNION ALL
                               SELECT COUNT(*) T1 FROM PRODUCTS.[PRODUCT_ARCHIVE] t WHERE t.TXDATE BETWEEN '2015-06-01' AND '2015-06-02'
                               UNION ALL
                               SELECT COUNT(*) T1 FROM PRODUCTS.[PRODUCT_CANCEL] t WHERE t.TXDATE BETWEEN '2015-06-01' AND '2015-06-02'
                               ) M

1 个答案:

答案 0 :(得分:1)

您可以使用Concat扩展名来合并结果。

    var startTime = DateTime.Parse("2015-06-01");
    var endTime = DateTime.Parse("2015-06-02");
    var products = context.Set<Products>()
                   .Where(p => p.TXDATE >= startTime and p.TXDATE <= endTime);
    var archivedProducts = context.Set<ProductArchive>()
                           .Where(p => p.TXDATE >= startTime and p.TXDATE <= endTime)
                           .Select(ap => new Products(){...});
    var canceledProducts = context.Set<ProductsCancled>()
                           .Where(p => p.TXDATE >= startTime and p.TXDATE <= endTime)
                            .Select(cp => new Products(){...});;

    var allProducts = products.Concat(archivedProducts)
                      .Concat(canceledProducts).ToList();

如您所见,您必须将彼此的产品类型投射到相同的类型。在这种情况下,我们将存档产品和取消的产品投射到产品实体。