Linq to sql 使用LINQ查询和基于顺序的两个参数连接两个表
我有两张桌子,顾客和订单。我需要一个LINQ查询来获取所有客户下的所有订单列表,这些订单先是按月组织,然后是按年组织。如果没有与客户对应的订单,则应显示“无订单” Customers表的列是Linq to sql 使用LINQ查询和基于顺序的两个参数连接两个表,linq-to-sql,join,Linq To Sql,Join,我有两张桌子,顾客和订单。我需要一个LINQ查询来获取所有客户下的所有订单列表,这些订单先是按月组织,然后是按年组织。如果没有与客户对应的订单,则应显示“无订单” Customers表的列是 customer_id name city Orders表的列是 order_id order_date order_total customer_id 我试着用下面的方法写它,但它没有给出完整的输出 var res = from cust in db.Customers join
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
};
如何纠正它?您可以这样做:
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()
orderby d.OrderDate.Year, d.OrderDate.Month
select new {
name=cust.name,
oId = d.order_id.ToString() ?? "No Orders"
};
我最终得到了正确的答案,这与预期的结果完全一致。我将其放在下面。我使用了两个LINQ查询来获得结果。第一个查询给出了结果,但最终结果需要显示客户名称及其订单总数,因此这是部分结果。第二个LINQ查询进一步细化了“pa”rtialResult'并按预期给出结果
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谓词来实现
var res = Customers.Join(Orders, x => x.customer_id, y => y.customer_id, (x, y) => x).ToList();
你能帮我理解“先按月组织,然后按年组织”是什么意思吗