Nasıl LINQ kullanarak DataTable gelen isimlerinden ayrı, sıralı bir listesini nasıl alabilirim?

oy
83

Bir var DataTablebir ile Namesütunda. Ben alfabetik eşsiz isimleri bir koleksiyon oluşturmak istiyorum. Aşağıdaki sorgu göz ardı tarafından sipariş maddesi.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr[Name]
    select (string)dr[Name]).Distinct();

Neden gelmez orderbyzorlanan alamadım?

Oluştur 01/08/2008 saat 14:14
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
51

Sorun Farklı operatör o değerlerin orijinal düzeni korumak edeceğini vermez olmasıdır.

Yani sorgu bu gibi çalışmak gerekir

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Cevap 01/08/2008 saat 14:18
kaynak kullanıcı

oy
30

daha okunabilir ve sürdürülebilir hale getirmek için, aynı zamanda birden fazla LINQ ifadeleri halinde bölmeli olabilir.

  1. İlk olarak, diyelim, yeni bir liste halinde veri seçmek x1istenirse bir projeksiyon yapmak,
  2. Daha sonra, gelen, farklı bir liste oluşturmak x1içine x2, istenilen her türlü ayrım kullanarak,
  3. Son olarak, gelen, sıralı bir liste oluşturmak x2içine x3ne arzu göre sıralama
Cevap 04/09/2008 saat 03:57
kaynak kullanıcı

oy
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Cevap 05/12/2008 saat 02:08
kaynak kullanıcı

oy
5

Aşağıdaki deneyin:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Cevap 28/04/2013 saat 10:27
kaynak kullanıcı

oy
1

Takip etmeyi dene

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

Bu gerekenler için çalışmalıdır.

Cevap 07/08/2008 saat 03:35
kaynak kullanıcı

oy
0

Böyle bir şey kullanabilirsiniz:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Cevap 25/06/2018 saat 10:56
kaynak kullanıcı

oy
0

soyut Kime: cevapların hepsinin ortak bir noktası var.

OrderBy nihai işlem olması gerekiyor.

Cevap 30/01/2018 saat 16:19
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more