我有两个表客户和订单。我想要一个 LINQ 查询来获取所有客户下的所有订单的列表,这些订单首先按月组织,然后按年组织。如果没有与客户对应的订单,则应显示“无订单”。
客户表的列是
customer_id
name
city
Orders 表的列是
order_id
order_date
order_total
customer_id
我尝试按以下方式编写它,但没有提供完整的输出。
var res = from cust in db.Customers
join ord in db.Orders
on cust.customer_id equals ord.customer_id into g
from d in g.DefaultIfEmpty()
select new {
name=cust.name,
oId=d.order_id==null?-1:d.order_id
};
我该如何纠正?
最佳答案
我终于得到了正确的答案,这正是预期的结果。我已经把它放在下面了。我已经使用了两个 LINQ 查询来获得结果。第一个给出结果,但最终结果需要显示客户姓名和他们的订单总数,因此它是部分结果。第二个 LINQ 查询进一步优化了“partialResult”并给出了预期的结果。
var partialResult = (from c in db.Customers
join o in db.Orders
on c.customer_id equals o.customer_id
select new
{c.name,
o.order_total,
o.order_date }).OrderBy(m => m.order_date.Month).ThenBy(y => y.order_date.Year);
var finalResult = from c in db.Customers
orderby c.name
select new
{
name = c.name,
list = (from r in partialResult where c.name == r.name select r.order_total).ToList()
};
foreach (var item in finalResult)
{
Console.WriteLine(item.name);
if (item.list.Count == 0)
{
Console.WriteLine("No orders");
}
else
{
foreach (var i in item.list)
{
Console.WriteLine(i);
}
}
}
关于linq-to-sql - 使用 LINQ 查询和基于两个参数的顺序连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789659/