2013-05-14 62 views
1

基本上我试图写它加入上选择顶部1从第二表的查询所以像:LINQ查询与加入的子查询

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

我有点不确定最终的结果是什么? 'pi.Quantity * p.ItemCount'?那其中的一个假设是价格乘以数量可能?你想获得发票的总价吗? – SBurris

+0

可以说系统有点令人困惑,而订单中还有一定数量的商品还包含一定数量的商品,因此我试图获取所购商品的总数(商品数量)。问题是我需要加入sku,sku并不是独一无二的,所以我希望加入第一个可行的sku,而不是所有的sku。 – bonneyab

+0

因此,您希望获得发票(订单)上的订单项(产品)上购买的商品总数?是从数据库填充数据(我很好奇,如果这是Linq /实体框架,它已经链接到已引用的表,或者如果连接必须手工完成)。例如_invoiceRepository.Table.First()。发票存在? – SBurris

回答

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)) 
       }; 

因为我做了不知道这三个对象(发票,PurchaseInfo和产品)的类我在做一个猜测他们是什么:

发票类:我认为它有一个列表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; } 
} 

产品类别:我assome有一个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; } 
} 

希望你可以采取这样的得到你所需要的。如果不行,请用类定义更新问题(如果需要,可以删除不需要的特性),这样可以产生更好的答案。