台灣最大程式設計社群網站
線上人數
603
 
會員總數:246037
討論主題:189624
歡迎您免費加入會員
討論區列表 >> C# >> [請教]Linq語法
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[請教]Linq語法
價值 : 100 QP  點閱數:354 回應數:6
樓主

喵喵
初學者
60 112
1910 313
發送站內信

各位大大好:
使用LinqPad程式碼如下:
是有跑出我想要的結果。
但有句法的問題想問,共有3個問題。
1、問題註解在下方的select g;
2、selectQ的陳述式要如何改成Linq的語法呢?
3、在group 那裡,是否有其他的linq語法可以執行出我要的結果呢?
謝謝各位大大佛心的回應,感恩。

void Main()
{
AuctionItemSuscriber.ItemPrice ip1 = new AuctionItemSuscriber.ItemPrice() { ItemName = "Book1", Price = 1170 };
AuctionItemSuscriber.ItemPrice ip2 = new AuctionItemSuscriber.ItemPrice() { ItemName = "Book2", Price = 3960 };
AuctionItemSuscriber.ItemPrice ip3 = new AuctionItemSuscriber.ItemPrice() { ItemName = "Phone3", Price = 5000 };
AuctionItemSuscriber.ItemPrice ip4 = new AuctionItemSuscriber.ItemPrice() { ItemName = "Book2", Price = 3333 };
AuctionItemSuscriber user1 = new AuctionItemSuscriber() { User = "user1", SuscribeItem = { ip1, ip2, ip3 } };
AuctionItemSuscriber user2 = new AuctionItemSuscriber() { User = "user2", SuscribeItem = { ip4 } };

List<AuctionItemSuscriber> allUsers = new List<AuctionItemSuscriber>();
allUsers.Add (user1);
allUsers.Add (user2);

var selectQ = from u in allUsers
from i in u.SuscribeItem
group new { User = u.User, ItemName = i.ItemName, Price = i.Price } by i.ItemName into g
select g;
// 這裡的Select q為什麼無法改成 g.ToDictionary (q => q.Key, q=> q.ToList())
// 結果就是需在下面的迴圈另外修改。
foreach (var s in selectQ.ToDictionary (q => q.Key, q=> q.ToList()))
{
Console.WriteLine (s);
}
}

public class AuctionItemSuscriber
{
public class ItemPrice
{
public string ItemName;
public int Price;

public override string ToString()
{
return $"{ItemName} ${Price.ToString ("N0")}";
}
}

public string User;
public List<ItemPrice> SuscribeItem = new List<ItemPrice> (256);
}


搜尋相關Tags的文章: [ Linq ] , [ ToDictionary ] ,
本篇文章發表於2019-11-29 13:28
== 簽名檔 ==
日文N1檢定合格。
朝英文前進~
1樓
作者回應

喵喵
檢舉此回應
不能修改文章,我重貼一下。

本篇文章回覆於2019-11-29 13:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

誰是誰
檢舉此回應
Linq Query Expression 應該是不支援 ToDictionary 語法, 要在一個敘述做完,只能用 method expression

關於 query expression 參考: 查詢運算式

至於你的問題如果要用 method expression 解,應該是長成這樣 (看起來其實沒有比較容易寫或理解):

本篇文章回覆於2019-12-02 02:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

喵喵
檢舉此回應
感謝誰是誰大大佛心的回應,
因為我是在這個網站上看到他gourpby最後還用了ToDictionary
https://blog.darkthread.net/blog/linq-groupby-todictionary-grouping/

他的程式碼確實可以執行,
但和我例子中的GroupBy有什麼差別呢?
怎麼我的就不行呢?
本篇文章回覆於2019-12-02 10:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

誰是誰
檢舉此回應
linq 敘述寫法有兩種 (query expression , method expression),上面給你的連結中 "查詢運算式" 那一節有列出 query expression 可用的語法。

你用的是 query expression 所以寫成 group by,你看的文章寫的是 method expression,所以他用的是 GroupBy (我的範例用的也是 GroupBy);看出差別了沒?

在 linq to object 中這兩種寫法的編譯結果相同沒錯,但是卻是兩種不同的敘述表達,各有優缺,所以混用的機會很大。

如果想要學好 linq,忠成老師在 SkillTree 開的兩門課很值得學 (忠成老師以前的著作 "極意之道-次世代 .net framework 3.5 資料庫開發聖典" 應該是台灣解析 linq 最詳細最精采的書,可惜絕版了,你可以 google 搜尋看看大家對這本書的評價),參考以下連結,連結給個是過去開課記錄,建議你多關心 SkillTree 網站,明年上半年應該還會開課:


深入淺出 LINQ 第二梯
LINQ 實戰技巧第二梯

建議你一定要先上過 "深入淺出 LINQ" 再去上 "LINQ 實戰技巧"。你會發現 LINQ 有一片你連想都沒想過的天地。
本篇文章回覆於2019-12-02 10:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

誰是誰
檢舉此回應
對了,如果要關注最新課程,請按這個連結 SkillTree 目前活動
本篇文章回覆於2019-12-02 10:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

喵喵
檢舉此回應
感謝誰是誰大大佛心的回應,感恩。
本篇文章回覆於2019-12-02 11:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.