拥有三个表(Item、Purchase、PurchaseItem)我正在尝试编写一个 linq 查询来查找一个项目包含多少有效购买。
在标准 SQL 中,我会使用带有计数的子查询,但我似乎无法获得 linq 查询来执行此操作。
SQL:
select i.name,
InTrade = (select count(*) from Purchase p join PurchaseItem pi on p.id = pi.PurchaseId where p.Isvalid = 1 and pi.ItemId = i.Id)
from Item i
林克:
from i in Items select new
{
i.Name,
InTrade = from pi in PurchaseItems where pi.ItemId == i.ID
select new
{
pi,
Purchase = from p in Purchases where p.ID == pi.PurchaseId
select new { p }
}
}
在这里,我试图在一个查询中检索我的所有数据,我可能需要另一个查询才能真正得到我想要的。我可能用这种方法走上了一条麻烦的道路,所以也许有人可以阐明在 linq 中实现这一目标的“最佳实践”。
我为这个例子准备了一些测试数据:
if exists (select * from sysobjects where name = 'PurchaseItem') drop table PurchaseItem
if exists (select * from sysobjects where name = 'Item') drop table Item
if exists (select * from sysobjects where name = 'Purchase') drop table Purchase
go
create table Item
(
ID int not null primary key,
Name nvarchar(30) not null
)
create table Purchase
(
ID int not null primary key,
Name nvarchar(30) not null,
ConfirmedDate datetime,
Isvalid bit not null
)
create table PurchaseItem
(
ID int not null primary key,
PurchaseId int null references Purchase(ID),
ItemId int null references Item(ID)
)
insert Item values (1, 'Bread')
insert Item values (2, 'Beer')
insert Item values (3, 'Wine')
insert Item values (4, 'Milk')
insert Item values (5, 'Apple')
insert Item values (6, 'Steak')
insert Item values (7, 'Hamburger')
insert Item values (8, 'Vinegar')
insert Purchase values (1, 'Purchase 1', null, 1)
insert Purchase values (2, 'Purchase 2', null, 0)
insert Purchase values (3, 'Purchase 3', '2008-1-7', 1)
insert PurchaseItem values (1, 1, 1)
insert PurchaseItem values (2, 1, 2)
insert PurchaseItem values (3, 1, 3)
insert PurchaseItem values (4, 1, 4)
insert PurchaseItem values (5, 1, 5)
insert PurchaseItem values (6, 1, 6)
insert PurchaseItem values (7, 2, 2)
insert PurchaseItem values (8, 3, 2)
insert PurchaseItem values (9, 3, 1)
insert PurchaseItem values (10, 3, 5)