1

基本上我正在尝试编写一个查询,它从第二个表中加入 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();
4

1 回答 1

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

希望你能得到你需要的东西。如果这不可行,请使用类定义更新问题(如果需要,您可以删除不需要的属性),以便产生更好的答案。

于 2013-05-15T17:50:07.580 回答