C# 在c中使用实体框架和linq连接两个表#
我试图在c#中组合两个表以进行订单管理。其中“SalesOrderDetails”表返回逗号分隔的产品代码和数量 “SalesOrder”表返回订单详细信息。 我已经编写了存储过程C# 在c中使用实体框架和linq连接两个表#,c#,sql-server,entity-framework,linq,C#,Sql Server,Entity Framework,Linq,我试图在c#中组合两个表以进行订单管理。其中“SalesOrderDetails”表返回逗号分隔的产品代码和数量 “SalesOrder”表返回订单详细信息。 我已经编写了存储过程 ALTER procedure [dbo].[SP_GetAllOrders] AS BEGIN SELECT SalesOrder.OrderDate, SalesOrder.OrderTitle, SalesOrder.OrderPriority, Customer.Lna
ALTER procedure [dbo].[SP_GetAllOrders]
AS
BEGIN
SELECT
SalesOrder.OrderDate,
SalesOrder.OrderTitle,
SalesOrder.OrderPriority,
Customer.Lname,
Customer.Fname,
OrderType.OrderTypeName,
(
SELECT
CAST( ProductCode AS varchar ) + ':' + CAST( Quantity AS varchar ) + ','
FROM
SalesOrderDetails
WHERE
SalesOrderDetails.SalesOrderId = SalesOrder.SalesOrderId
FOR xml path('')
) AS 'Product'
FROM
SalesOrder
INNER JOIN Customer ON SalesOrder.CustomerId = Customer.CustomerId
INNER JOIN OrderType ON SalesOrder.OrderTypeId = OrderType.OrderTypeId
END
它给了我完美的输出。没有使用存储过程的情况下,我想要相同的输出。
我希望使用实体框架、linq和c#asp.net获得相同的输出。我被困在这里了
这就是我尝试过的
TrainingDemoEntities实体=新的TrainingDemoEntities()
您应该使用LINQ查找一些示例联接并首先尝试,然后向我们展示您所完成的工作。你不能只是来这里索要代码。我不仅仅是索要代码。我已经尝试了许多不同的方法@armindoos你的数据库设置了外键关系?EF是否利用了这种关系?如果它在您的计算机上计算联接而不是在SQL中进行计算,那么效率会很低。我已经很久没有使用LINQ了。我的理解是问题在于逗号分隔的列表。您不能使用两个单独的查询并在之后连接结果吗?您不应该在SQL中生成CSV,因为这是交叉关注点(数据检索和表示):SQL(或Linq)应该只关注获取原始数据,只有后续的C#代码应该将其转换为CSV表示。
var details = (from order in entity.SalesOrders
join cust in entity.Customers
on order.CustomerId equals cust.CustomerId
join ordertypevalue in entity.OrderTypes
on order.OrderTypeId equals ordertypevalue.OrderTypeId
select new
{
orderId = order.SalesOrderId,
orderDate = order.OrderDate,
orderTitle = order.OrderTitle,
orderPriority = order.OrderPriority,
orderType = order.OrderType,
productstr = string.Join(",", (from prod in entity.SalesOrderDetails
where prod.SalesOrderId == order.SalesOrderId
select prod.ProductCode + ":" + prod.Quantity))
}).ToList();