我有兩個表Customers和Orders。我想要一個LINQ查詢來獲取由所有的客戶組織的所有訂單的列表,然後按年分組。如果有相應的客戶,「沒有訂單」沒有訂單應顯示。使用LINQ查詢和基於兩個參數的訂單加入兩個表
Customers表的列
customer_id
name
city
Orders表的列
order_id
order_date
order_total
customer_id
我試着以下面的方式寫它,但它不給出完整的輸出。我糾正它嗎?
我有兩個表Customers和Orders。我想要一個LINQ查詢來獲取由所有的客戶組織的所有訂單的列表,然後按年分組。如果有相應的客戶,「沒有訂單」沒有訂單應顯示。使用LINQ查詢和基於兩個參數的訂單加入兩個表
Customers表的列
customer_id
name
city
Orders表的列
order_id
order_date
order_total
customer_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);
}
}
}
這是你可以做什麼:
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 Predicates做到這一點
var res = Customers.Join(Orders, x => x.customer_id, y => y.customer_id, (x, y) => x).ToList();
你能幫我理解你的意思是什麼「按月組織,然後按年」。你的意思是OrderBy – CSharped
是的,它應該'OrderBy' –