在asp.net mvc中对LINQ进行SQL查询
本文关键字:进行 SQL 查询 LINQ 中对 asp net mvc | 更新日期: 2023-09-27 18:23:55
请任何人帮助我将此sql查询写入Linq。我试过了。。
这是我的sql查询
select o.OrderID,o.Nature,o.Date,od.TotalPrice,os.OrderStatus,lo.FirstName,lo.EmailAddress,lo.PhoneNumber
from [dbo].[Order] o
inner join [dbo].[tbl_OrderDetails] od on od.OrderID = o.OrderID
inner join [dbo].[tbl_OrderHistory] oh on oh.OrderID = o.OrderID
inner join [dbo].[tbl_Login] lo on o.UserID = lo.UserID
inner join dbo.tbl_OrderStatus os on oh.OrderStatusID= os.OrderStatusID
group by o.OrderID,o.Nature,od.TotalPrice,o.Date,os.OrderStatus,lo.FirstName,lo.EmailAddress,lo.PhoneNumber
这是我尝试的
public override orderDetailModel orderDetails(int id)
{
var results = from o in obj.Orders
join od in obj.tbl_OrderDetails on o.OrderID equals od.OrderID
join oh in obj.tbl_OrderHistory on o.OrderID equals oh.OrderID
join l in obj.tbl_Login on o.UserID equals l.UserID
join os in obj.tbl_OrderStatus on oh.OrderStatusID equals os.OrderStatusID
where (od.OrderID == id)
group o by new { o.Nature, o.OrderID } into
select new orderDetailModel
{
OrderID = o.OrderID,
OrderStatus = os.OrderStatus,
Date = o.Date,
DeliveryNature = o.Nature,
EmailAddress = l.EmailAddress,
FirstName = l.FirstName,
PhoneNumber = l.PhoneNumber,
TotalPrice = od.TotalPrice
};
//group o by new {o.OrderID};
orderDetailModel data = (orderDetailModel)results.FirstOrDefault();
return data;
}
但这是错误的查询,它不能正常工作,请帮助我
您需要更正group by
子句,就像您在SQL查询中所做的那样:-
group new { o, l } by new { o.OrderID,o.Nature,od.TotalPrice,o.Date,os.OrderStatus,
l.FirstName, l.EmailAddress,l.PhoneNumber } into g
select new orderDetailModel
{
OrderID = g.Key.OrderID,
OrderStatus = g.Key.OrderStatus,
Date = g.Key.Date,
..and so on
};
由于需要在两个表CCD_ 2&tbl_Login
您必须首先将它们投影为匿名类型group new { o, l }
,然后指定所有分组,最后在投影时使用Key
来获得相应的项。
我想实际上,SQL查询也是不正确的。我只需要使用SELECT DISTINCT。。。而不是对所有列进行分组。
无论如何,首先要做的是:
- 检查数据库的设计是否正确。据我所见,如果你用他们的ID加入表格,我不明白为什么你需要对所有数据进行分组。如果有重复项,则可能是数据库设计中的错误
-
如果你不能更改你的数据库,或者你对此很满意,那么使用以下LINQ方法:
var distinctKeys = allOrderDetails.Select(o => new { o.OrderID, o.Nature, o.TotalPrice, o.Date,o.OrderStatus,o.FirstName, o.EmailAddress,o.PhoneNumber }).Distinct(); var joined = from e in allOrderDetails join d in distinctKeys on new { o.OrderID, o.Nature,o.TotalPrice, o.Date,o.OrderStatus, o.FirstName, o.EmailAddress, o.PhoneNumber } equals d select e; joined.ToList(); // gives you the distinct/grouped list