基本上我正在尝试编写一个查询,它连接到第二个表中的select top 1,如下所示:
SELECT Sum(pinfo.quantity + p.itemcount),
i.owner
FROM invoice i
JOIN purchase_info pinfo
ON pinfo.invoice = i.invid
JOIN (SELECT DISTINCT sku,
productlineid,
itemcount
FROM products WHERE productlineid in (13, 14)) p
ON p.sku = pinfo.item
WHERE i.owner = 22623
GROUP BY i.owner
这是我在linq中的可怜尝试,其语法有些无效,任何想法都会非常感激。
(from i in _invoiceRepository.Table
join pi in _purchaseInfoRepository.Table on i.InvoiceId equals pi.InvoiceId
join p in (from p2 in _productRepository.Table where p2.Sku == pi.Item select new { p2.Sku, p2.ItemCount }).Take(1)
on pi.Item equals p.Sku
where i.MemberId == memberId &&
(p.ProductLineId == (int)ProductLines.InkCartridges ||
p.ProductLineId == (int)ProductLines.TonerCartridges)
select pi.Quantity * p.ItemCount)
.DefaultIfEmpty(0)
.Sum();
答案 0 :(得分:1)
这是我对此的第一次尝试。
从sql中,您可能希望找到特定客户从中订购过多少墨水和碳粉盒。
这应该给你与sql相同的结果(这取决于Products表的顺序,因为我们在没有完成某种排序的情况下占据前1名:
var count = from i in _invoiceRepository.Table
where i.OwnerId == memberId
select new
{
OwnerId = i.OwnerId,
TotalProductCount = i.Purchases.Sum(pro => pro.Products
.Where(p => p.ProductLineId == (int)ProductLines.InkCartridges ||
p.ProductLineId == (int)ProductLines.TonerCartridges)
.Take(1)
.Sum(p => p.ItemCount * pro.Quantity))
};
由于我不知道三个对象(Invoice,PurchaseInfo和Product)的类,我猜测它们是什么:
发票类:我假设它有一个PurchaseInfos的列表/集合
public class Invoice
{
public int Id { get; set; }
public int OwnerId { get; set; }
public List<PurchaseInfo> Purchases { get; set; }
}
PurchaseInfos:发票有多个PurchaseInfos,每个都链接到(理想情况下)一个产品,但由于SKU不是唯一的,我认为它有一个列表/产品集合。
public class PurchaseInfo
{
public int Id { get; set; }
public int Quantity { get; set; }
public int InvoiceId { get; set; }
public Invoice Invoice { get; set; }
public int Item {get;set;}
public List<Product> Products { get; set; }
}
产品类别:我觉得某处有Id字段(未显示)或复合主键
public class Product
{
public int Sku { get; set; }
public int ProductLineId { get; set; }
public int ItemCount { get; set; }
public List<PurchaseInfo> PurchaseInfos { get; set; }
}
希望你能得到你需要的东西。如果有这种情况,请使用类定义更新问题(如果需要,可以删除不需要的特性),这样可以产生更好的答案。