我有下面的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
答案 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();
如您所见,您必须将彼此的产品类型投射到相同的类型。在这种情况下,我们将存档产品和取消的产品投射到产品实体。