คำถามติดแท็ก linq

Language Integrated Query (LINQ) เป็นส่วนประกอบ Microsoft .NET Framework ที่เพิ่มความสามารถในการสอบถามข้อมูลดั้งเดิมในภาษา. NET โปรดพิจารณาใช้แท็กที่มีรายละเอียดเพิ่มเติมตามความเหมาะสมเช่น [linq-to-sql], [linq-to-entity] / [entity-framework] หรือ [plinq]


5
มีการรับประกันอะไรบ้างเกี่ยวกับความซับซ้อนของเวลาทำงาน (Big-O) ของวิธีการ LINQ?
ฉันเพิ่งเริ่มใช้ LINQ ได้ไม่นานและฉันไม่เห็นการกล่าวถึงความซับซ้อนของรันไทม์สำหรับวิธีการใด ๆ ของ LINQ เลย เห็นได้ชัดว่ามีหลายปัจจัยในการเล่นที่นี่ดังนั้นขอ จำกัด การสนทนาเฉพาะIEnumerableผู้ให้บริการ LINQ-to-Objects ธรรมดา นอกจากนี้สมมติว่าสิ่งที่Funcส่งผ่านมาเป็นตัวเลือก / ตัวเปลี่ยน / ฯลฯ เป็นการดำเนินการ O (1) ราคาถูก ดูเหมือนว่าเห็นได้ชัดว่าทุกการดำเนินงานที่ผ่านเดียว ( Select, Where, Count, Take/Skip, Any/Allฯลฯ ) จะ O (n) เนื่องจากพวกเขาจะต้องเดินตามลำดับเมื่อ; แม้ว่าเรื่องนี้จะเป็นเรื่องขี้เกียจก็ตาม สิ่งต่าง ๆ มีความซับซ้อนมากขึ้นสำหรับการดำเนินการที่ซับซ้อนมากขึ้น ชุดเหมือนผู้ประกอบการ ( Union, Distinct, Exceptฯลฯ ) การทำงานโดยใช้GetHashCodeค่าเริ่มต้น (AFAIK) ดังนั้นจึงดูเหมือนว่าเหมาะสมที่จะถือว่าพวกเขากำลังใช้กัญชาตารางภายในทำให้การดำเนินงานเหล่า O (n) เช่นกันโดยทั่วไป สิ่งที่เกี่ยวกับเวอร์ชันที่ใช้IEqualityComparer? …

6
Entity Framework 4 Single () เทียบกับ First () เทียบกับ FirstOrDefault ()
ฉันมีปีศาจในการค้นหาการเปรียบเทียบวิธีต่างๆในการค้นหารายการเดียวและเวลาที่ควรใช้แต่ละรายการ ใครมีลิงค์ที่เปรียบเทียบสิ่งเหล่านี้ทั้งหมดหรือคำอธิบายสั้น ๆ ว่าทำไมคุณถึงใช้อันอื่น? ยังมีตัวดำเนินการอีกหรือไม่ที่ฉันไม่รู้จัก? ขอบคุณ.


9
NHibernate เทียบกับ LINQ เป็น SQL
ในฐานะคนที่ไม่ได้ใช้เทคโนโลยีอย่างใดอย่างหนึ่งในโครงการในโลกแห่งความเป็นจริงฉันสงสัยว่ามีใครรู้บ้างว่าทั้งสองนี้เสริมกันอย่างไรและฟังก์ชันการทำงานของพวกเขาทับซ้อนกันมากแค่ไหน?

5
วิธีเลือกเฉพาะระเบียนที่มีวันที่สูงสุดใน LINQ
ฉันมีตาราง 'lasttraces' พร้อมช่องต่อไปนี้ Id, AccountId, Version, DownloadNo, Date ข้อมูลมีลักษณะดังนี้: 28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000 28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000 28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000 28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000 28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000 28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000 ฉันจะรับเฉพาะ Lasttrace ของทุก AccountId ในLINQในLINQได้อย่างไร (อันที่มีวันที่สูงสุด)
117 c#  .net  linq  linq-to-sql 

5
ตั้งค่าคุณสมบัติหลายรายการในรายการ <T> ForEach ()?
ให้ชั้นเรียน: class foo { public string a = ""; public int b = 0; } จากนั้นรายการทั่วไปของพวกเขา: var list = new List&lt;foo&gt;(new []{new foo(), new foo()}); หากฉันต้องการกำหนดคุณสมบัติหลายรายการภายในList&lt;T&gt; ForEach()วิธีการต่อไปนี้มีวิธีที่ง่ายกว่านี้ไหม หวังว่าฉันจะหนาขึ้น // one property - easy peasy list.ForEach(lambda =&gt; lambda.a="hello!"); // multiple properties - hmm list.ForEach(lambda =&gt; new Action(delegate() { lambda.a = "hello!"; …
117 c#  linq 

5
linq ที่มีรายการใด ๆ ในรายการ
เมื่อใช้ linq ฉันจะเรียกข้อมูลรายการที่รายการคุณสมบัติตรงกับรายการอื่นได้อย่างไร ใช้ตัวอย่างง่ายๆนี้และรหัสเทียม: List&lt;Genres&gt; listofGenres = new List&lt;Genre&gt;() { "action", "comedy" }); var movies = _db.Movies.Where(p =&gt; p.Genres.Any() in listofGenres);
117 c#  linq 

13
วิธีการจัดเก็บรายการในคอลัมน์ของตารางฐานข้อมูล
ดังนั้นจากคำตอบของ Mehrdad สำหรับคำถามที่เกี่ยวข้องฉันเข้าใจว่าคอลัมน์ตารางฐานข้อมูล "ถูกต้อง" ไม่ได้เก็บรายการไว้ แต่คุณควรสร้างตารางอื่นที่เก็บองค์ประกอบของรายการดังกล่าวได้อย่างมีประสิทธิภาพจากนั้นเชื่อมโยงโดยตรงหรือผ่านตารางทางแยก อย่างไรก็ตามประเภทของรายการที่ฉันต้องการสร้างจะประกอบด้วยรายการที่ไม่ซ้ำกัน (ไม่เหมือนกับผลไม้ของคำถามที่เชื่อมโยงตัวอย่าง). นอกจากนี้รายการในรายการของฉันยังถูกจัดเรียงอย่างชัดเจนซึ่งหมายความว่าหากฉันเก็บองค์ประกอบไว้ในตารางอื่นฉันจะต้องจัดเรียงทุกครั้งที่เข้าถึง ในที่สุดรายการก็เป็นแบบปรมาณูเมื่อใดก็ตามที่ฉันต้องการเข้าถึงรายการฉันต้องการเข้าถึงรายการทั้งหมดแทนที่จะเป็นเพียงชิ้นส่วน - ดังนั้นจึงดูเหมือนโง่ที่ต้องออกแบบสอบถามฐานข้อมูลเพื่อรวบรวมชิ้นส่วนของ รายการ. โซลูชันของ AKX (ลิงก์ด้านบน) คือการทำให้รายการเป็นอนุกรมและจัดเก็บไว้ในคอลัมน์ไบนารี แต่สิ่งนี้ก็ดูเหมือนจะไม่สะดวกเช่นกันเพราะหมายความว่าฉันต้องกังวลเกี่ยวกับการทำให้เป็นอนุกรมและการแยกส่วน มีทางออกที่ดีกว่านี้หรือไม่? หากมีคือไม่มีทางออกที่ดีกว่าแล้วทำไม? ดูเหมือนว่าปัญหานี้จะเกิดขึ้นเป็นครั้งคราว ... ข้อมูลเพิ่มเติมเล็กน้อยเพื่อให้คุณรู้ว่าฉันมาจากไหน ทันทีที่ฉันเพิ่งเริ่มทำความเข้าใจ SQL และฐานข้อมูลโดยทั่วไปฉันก็เปิดใช้ LINQ เป็น SQL และตอนนี้ฉันรู้สึกเสียเล็กน้อยเพราะฉันคาดหวังว่าจะจัดการกับโมเดลอ็อบเจ็กต์การเขียนโปรแกรมของฉันโดยไม่ต้องคิดว่าอ็อบเจ็กต์ จะถูกสอบถามหรือเก็บไว้ในฐานข้อมูล ขอบคุณทุกคน! จอห์น อัปเดต: ดังนั้นในคำตอบแรกที่ฉันได้รับคำตอบฉันเห็นว่า "คุณสามารถไปเส้นทาง CSV / XML ได้ ... แต่อย่า!" ตอนนี้ฉันกำลังหาคำอธิบายว่าทำไม ชี้ให้ฉันดูข้อมูลอ้างอิงที่ดี นอกจากนี้เพื่อให้คุณมีความคิดที่ดีขึ้นว่าฉันกำลังทำอะไรอยู่: ในฐานข้อมูลของฉันฉันมีตารางฟังก์ชันที่จะมีรายการคู่ (x, y) (ตารางจะมีข้อมูลอื่น ๆ …

14
จะเปรียบเทียบเฉพาะวันที่จาก DateTime ใน EF ได้อย่างไร?
ฉันมีค่าวันที่สองค่าค่าหนึ่งเก็บไว้ในฐานข้อมูลแล้วและค่าอื่นที่ผู้ใช้เลือกโดยใช้ DatePicker กรณีการใช้งานคือการค้นหาวันที่ที่ต้องการจากฐานข้อมูล ค่าที่ป้อนก่อนหน้านี้ในฐานข้อมูลมักจะมีองค์ประกอบของเวลาคือ 12:00:00 น. โดยที่วันที่ที่ป้อนจากตัวเลือกจะมีส่วนประกอบของเวลาที่แตกต่างกัน ฉันสนใจเฉพาะส่วนประกอบวันที่และต้องการละเว้นองค์ประกอบเวลา การเปรียบเทียบนี้ใน C # มีวิธีใดบ้าง นอกจากนี้วิธีการทำใน LINQ อัปเดต: ใน LINQ ถึงเอนทิตีสิ่งต่อไปนี้ใช้งานได้ดี e =&gt; DateTime.Compare(e.FirstDate.Value, SecondDate) &gt;= 0

4
LINQ to Entities ไม่รู้จักเมธอด
ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามทำแบบสอบถาม linq: LINQ เป็นเอนทิตีไม่รู้จักเมธอด 'Boolean IsCharityMatching (System.String, System.String)' และวิธีนี้ไม่สามารถแปลเป็นนิพจน์ที่เก็บ ฉันได้อ่านคำถามก่อนหน้านี้มากมายที่ผู้คนได้รับข้อผิดพลาดเดียวกันและถ้าฉันเข้าใจสิ่งนี้อย่างถูกต้องนั่นเป็นเพราะ LINQ to Entities ต้องการนิพจน์การค้นหา linq ทั้งหมดเพื่อแปลเป็นแบบสอบถามเซิร์ฟเวอร์ดังนั้นคุณจึงไม่สามารถเรียกวิธีการภายนอกได้ ในนั้น. ฉันยังไม่สามารถแปลงสถานการณ์ของฉันให้เป็นสิ่งที่ใช้งานได้และสมองของฉันก็เริ่มละลายลงดังนั้นฉันจึงหวังว่าจะมีใครบางคนชี้ฉันไปในทิศทางที่ถูกต้อง เรากำลังใช้ Entity Framework และรูปแบบข้อกำหนด (และฉันยังใหม่สำหรับทั้งสองอย่าง) นี่คือรหัสที่ใช้ข้อกำหนด: ISpecification&lt;Charity&gt; specification = new CharitySearchSpecification(charityTitle, charityReference); charities = charitiesRepository.Find(specification).OrderBy(p =&gt; p.RegisteredName).ToList(); นี่คือนิพจน์ linq: public System.Linq.Expressions.Expression&lt;Func&lt;Charity, bool&gt;&gt; IsSatisfied() { return p =&gt; p.IsCharityMatching(this.charityName, this.charityReference); } นี่คือวิธี IsCharityMatching: …

10
ฉันจะรับทุกรายการที่ n จากรายการ <T> ได้อย่างไร?
ฉันใช้. NET 3.5 และต้องการได้รับทุก ๆ * n* th จากรายการ ฉันไม่ได้ใส่ใจว่ามันทำได้โดยใช้นิพจน์แลมบ์ดาหรือ LINQ แก้ไข ดูเหมือนคำถามนี้จะกระตุ้นให้เกิดการถกเถียงกันมากทีเดียว (ซึ่งเป็นสิ่งที่ดีใช่มั้ย?) สิ่งสำคัญที่ฉันได้เรียนรู้คือเมื่อคุณคิดว่าคุณรู้ทุกวิธีในการทำบางสิ่งบางอย่าง (แม้จะง่ายอย่างนี้ก็ตาม) ให้คิดใหม่!
115 c#  linq  list  lambda 

7
ลำดับของฟังก์ชัน LINQ มีความสำคัญหรือไม่?
โดยทั่วไปตามคำถามระบุว่า ... ลำดับของฟังก์ชัน LINQ มีความสำคัญในแง่ของประสิทธิภาพหรือไม่? เห็นได้ชัดว่าผลลัพธ์จะต้องเหมือนเดิม ... ตัวอย่าง: myCollection.OrderBy(item =&gt; item.CreatedDate).Where(item =&gt; item.Code &gt; 3); myCollection.Where(item =&gt; item.Code &gt; 3).OrderBy(item =&gt; item.CreatedDate); ทั้งสองให้ผลลัพธ์เดียวกันกับฉัน แต่อยู่ในลำดับ LINQ ที่แตกต่างกัน ฉันตระหนักดีว่าการจัดเรียงรายการบางรายการใหม่จะทำให้ได้ผลลัพธ์ที่แตกต่างกันและฉันไม่ได้กังวลเกี่ยวกับสิ่งเหล่านั้น สิ่งที่ฉันกังวลหลักคือการรู้ว่าในการได้ผลลัพธ์เดียวกันการสั่งซื้ออาจส่งผลต่อประสิทธิภาพหรือไม่ และไม่ใช่แค่ในการโทร 2 LINQ ที่ฉันโทร (OrderBy, Where) แต่ในการโทร LINQ ใด ๆ
114 c#  performance  linq 

8
ค้นหาดัชนีของค่าในอาร์เรย์
linq สามารถใช้เพื่อค้นหาดัชนีของค่าในอาร์เรย์ได้หรือไม่? ตัวอย่างเช่นลูปนี้ค้นหาดัชนีคีย์ภายในอาร์เรย์ for (int i = 0; i &lt; words.Length; i++) { if (words[i].IsKey) { keyIndex = i; } }
113 c#  arrays  linq 

5
ลำดับไม่มีองค์ประกอบที่ตรงกัน
ฉันมีแอปพลิเคชัน asp.net ซึ่งฉันใช้ linq สำหรับการจัดการข้อมูล ขณะทำงานฉันได้รับข้อยกเว้น "ลำดับไม่มีองค์ประกอบที่ตรงกัน" if (_lstAcl.Documents.Count &gt; 0) { for (i = 0; i &lt;= _lstAcl.Documents.Count - 1; i++) { string id = _lstAcl.Documents[i].ID.ToString(); var documentRow = _dsACL.Documents.First(o =&gt; o.ID == id); if (documentRow !=null) { _lstAcl.Documents[i].Read = documentRow.Read; _lstAcl.Documents[i].ReadRule = documentRow.ReadRule; _lstAcl.Documents[i].Create= documentRow.Create; _lstAcl.Documents[i].CreateRule = documentRow.CreateRule; …
113 c#  linq  exception 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.