Entity Framework เลือกชื่อเฉพาะ


คำตอบ:


277

ใช้แลมด้านิพจน์ ..

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();

2
อาจเป็นคำถามบ้าๆ แต่สิ่งนี้ส่งคืนที่อยู่ทั้งหมดไปยังเลเยอร์รหัส C # แล้วกรองหรือส่งแบบสอบถามที่เหมาะสมไปยังเซิร์ฟเวอร์ฐานข้อมูลเพื่อส่งคืนเฉพาะค่าที่ไม่ซ้ำกัน?
DA

ผลประเภทข้อมูลจะเป็นอย่างไร
Souradeep Banerjee-AIS

@DA EF จะส่งแบบสอบถามที่เหมาะสมไปยัง DB stackoverflow.com/questions/37595253/…
py2020

52

ลองสิ่งนี้:

var results = (from ta in context.TestAddresses
               select ta.Name).Distinct();

สิ่งนี้จะทำให้คุณIEnumerable<string>- คุณสามารถโทรหา.ToList()เพื่อรับไฟล์List<string>.


1
วิธีนี้ได้รับประสิทธิภาพที่ดีกว่าการจัดกลุ่ม แตกต่าง: เวลาดำเนินการของเซิร์ฟเวอร์ SQL: เวลา CPU = 0 ms, เวลาที่ผ่านไป = 50 ms การจัดกลุ่ม: SQL Server Execution Times: เวลา CPU = 0 ms, เวลาที่ผ่านไป = 112 ms
Andre Mendonca

25

วิธีที่@alliswellแสดงนั้นใช้ได้อย่างสมบูรณ์และมีอีกวิธีหนึ่ง! :)

var result = EFContext.TestAddresses
    .GroupBy(ta => ta.Name)
    .Select(ta => ta.Key);

ฉันหวังว่ามันจะเป็นประโยชน์กับใครบางคน


1
สิ่งนี้มีประโยชน์มากสำหรับฉันเนื่องจากฉันต้องเลือกหลายคอลัมน์
mamashare

17
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

หากคุณมีหลายคอลัมน์ให้ทำดังนี้:

DBContext.TestAddresses.Select(m => new {m.NAME, m.ID}).Distinct();

ในตัวอย่างนี้ไม่มี CategoryId ซ้ำกันและไม่มี CategoryName ฉันหวังว่านี่จะช่วยคุณได้


4

Entity-Framework เลือกชื่อที่แตกต่าง:

สมมติว่าคุณใช้มุมมองที่คุณใช้หลายตารางและคุณต้องการใช้ความแตกต่างในกรณีนั้นก่อนอื่นคุณต้องเก็บค่าในตัวแปรจากนั้นคุณสามารถใช้ความแตกต่างกับตัวแปรนั้นได้เช่นนี้ ...

public List<Item_Img_Sal_VIEW> GetItemDescription(int ItemNo) 
        {
            var Result= db.Item_Img_Sal_VIEW.Where(p => p.ItemID == ItemNo).ToList();
            return Result.Distinct().ToList();
        }

หรือคุณสามารถลองใช้ตัวอย่างง่ายๆนี้

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function

สวัสดีเมื่อฉันทำสิ่งนี้บนตารางฉันได้รับข้อผิดพลาด -> ไม่สามารถแปลงสตริงเป็น IEnumreable ..คุณช่วยแสดงวิธีรับรายการเพื่อให้ฉันสามารถเติมข้อมูลในรายการแบบหล่นลงโดยมีค่าที่แตกต่างจากคอลัมน์ตารางที่มี NVARCHAR ใน EF DB
aggie


2

เพื่อหลีกเลี่ยงORDER BY items must appear in the select list if SELECT DISTINCTข้อผิดพลาดควรจะดีที่สุด

var results = (
    from ta in DBContext.TestAddresses
    select ta.Name
)
.Distinct()
.OrderBy( x => 1);

1

Entity-Framework เลือกชื่อที่แตกต่าง:

สมมติว่าคุณต้องการทุกข้อมูลแรกของคอลัมน์เฉพาะของแต่ละกลุ่ม

 var data = objDb.TableName.GroupBy(dt => dt.ColumnName).Select(dt => new { dt.Key }).ToList();

            foreach (var item in data)
            {
                var data2= objDb.TableName.Where(dt=>dt.ColumnName==item.Key).Select(dt=>new {dt.SelectYourColumn}).Distinct().FirstOrDefault();

               //Eg.
                {
                       ListBox1.Items.Add(data2.ColumnName);                    
                }

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