将SQL转换为Linq Lambda

本文关键字:Linq Lambda 转换 SQL | 更新日期: 2023-09-27 18:01:22

我有两个实体(EF 6),分别命名为purchasing和Packets。我可以将这两个连接起来,但不太确定如何计算给定Purchase中包含的数据包。我有这个SQL查询转换为LINQ (Lambda表达式首选)。

谢谢

SELECT 
    Pur.*, 
    Pac.Price, 
    (SELECT COUNT(ID) FROM Packets WHERE PurchaseID = Pur.ID) AS PacketCount
FROM 
    Purchases AS Pur
INNER JOIN 
    Packets AS Pac 
ON 
    Pur.ID = Pac.PurchaseID

注意:我检查了回答的Q,但没有一个是解决我的问题。

将SQL转换为Linq Lambda

我不是LINQ专家(远非如此),但我做过类似的事情。你说你已经完成了连接。如果是:

var joinList = (from Item1 in Purchases
                            join Item2 in Packets
                            on Item1.Id equals Item2.PurchaseId 
                            select new { Item1, Item2 }).ToList();

那么你可以去:

var subList = joinList.Where(j => j.Item1.Id == myId).Select(s => { new s.Item1, s.Item2.Price, Count = joinList.Where(j => j.Item1.Id == myId).Count() }).ToList();

这将为您提供一个类似于SQL返回的记录集的列表。注意,您需要拆分Item1中的所有字段(相当于purchas.*)。另一种方法是在Select中将它们全部命名(如s.t item2 . price)。

HTH