2010-05-24 20 views
6

Birkaç yıldır bir programcı oldum ama LINQ ve C# için yeni bir
kullanıcısıyım, bu yüzden eğer sorularım
özellikle aptalsa beni affedin.nasıl maddelerine göre mümkün çoklu grup ile C# dinamik LINQ sorgusu oluşturabilirsiniz?

Umarım birisi bana doğru
yönünü gösterebilir. Benim görevim
kaynağı olarak genel bir listesini kullanarak C# komut dosyası içinde linq sorgu tarafından bir
dinamik çoklu grup oluşturmak için yeteneği ile gelip etmektir. Ben
FieldNum1 ve FieldNum2 özetleyecek bir LINQ sorgu oluşturmak için mümkün istiyorum Özetle

FieldChar1 - character 
FieldChar2 - character 
FieldChar3 - character 
FieldNum1 - numeric 
FieldNum2 - numeric 

: Örneğin

, şu
yapıya sahip birden çok öğe içeren bir liste var ki herhangi birine kullanıcıların gereksinimlerine bağlı olarak aynı sorguda FieldChar alanlarını seçerek
zamanında karar verilecektir FieldChar alanlarının iki veya
üçü göre gruplandırılmış.

Bir GroupByMany uzantısı yöntemi icludes Projemdeki dynamic.cs var ama ben gerçekten bu kullanmayı koymak nasıl emin değilim itiraf etmeliyim. Ben istekleri ancak dinamik sabit kablolu grubuyla bir sorgu kullanırsanız istenen sonuçları elde etmek mümkün. herhangi hatalı isimlendirme

Özür dilerim, bu dile yeni ama herhangi bir tavsiye en hoş olurdu.

çok teşekkürler

Alex

cevap

1

Burada temel GroupBy örnektir. Böyle GroupBy kullanabilirsiniz Ardından

public class Person 
{ 
    public string Name { get; set; } 

    public int Age { get; set; } 

    public char Sex { get; set; } 
} 

: Şimdi bu gibi basit bir sınıf var diyelim birden çok otel tarafından gruplama gelince

var people = new List<Person> { 
    new Person { Name = "Joe", Age = 30, Sex = 'M' }, 
    new Person { Name = "Liz", Age = 22, Sex = 'F' }, 
    new Person { Name = "Jim", Age = 22, Sex = 'M' }, 
    new Person { Name = "Alice", Age = 30, Sex = 'F' }, 
    new Person { Name = "Jenny", Age = 22, Sex = 'F' } 
}; 
var groups = people.GroupBy(p => p.Age); 

foreach (var group in groups) 
{ 
    foreach (var person in group) 
     Console.WriteLine(person.Name + " - " + person.Age); 
} 

şu bkz:
http://weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in-linq-to-sql.aspx
LINQ TO DataSet: Multiple group by on a data table

Temel olarak, bu anonim türü ile aynı sözdizimi, örneğin,:

01.235.164 Eğer birden çok OrderBy s kullanarak arıyor olabilir
var groups = people.GroupBy(p => new { p.Age, p.Sex }); 

Not:

var query = people.OrderBy(p => p.Age).ThenBy(p => p.Sex); 
//You can have unlimited ThenBy's 

Ayrıca geçen GroupBy deyimi ve bu OrderBy ifadesinin sonucunun sonuç aynı değildir dikkat edin.

+0

çok teşekkürler. Bunu takdir ediyorum ve bana bakmak için yeni bir şey veriyor. Fakat sizin örnekleminizi almak mümkün ... var gruplar = people.GroupBy (p => new {p.Age, p.Sex}); , gruba göre (p.Age, p.Sex) grubun önceden oluşturulmuş bir değişken dizeyle değiştirilebildiği bir kod satırına girilebilir; bu, herhangi bir Yaş ve/veya Cinsiyet kombinasyonu olabilir. Dize birleştirme kullanarak dinamik olarak sorgunuzu oluşturabileceğiniz bir FoxPro/SQL arka planından geliyorum. Yine yardımın için minnettarım. – FordPrefect141

+0

@ FordPerfect141 - LINQ ile, dizeleri gerçekten birleştiremezsiniz, çünkü LINQ güçlü bir şekilde yazılmalıdır. Böyle bir ifadeyi dinamik olarak oluşturarak benzer bir şey elde edebilirsiniz. – Venemo

+0

Ah-ha. Yani sizin örneğinizde, kullanıcı bazen cinsiyetten ve yaşa göre gruplandırmak istiyorsa ve bazen sadece yaşa göre, grubu gerçekten fıkra kodlamaksızın bu konudan nasıl geçersiniz? Tekrar özür dilerim, bu benim için yeni. Tekrar çok teşekkürler. – FordPrefect141

0

GroupBy (groupByName + "" + groupByDirection, yeni {})

Yani arasında adım adım yaparken, sen

GroupBy (gibi bir şey görebilirsiniz, groupByName ve groupByDirection içinde geçebileceği "lastName desc", yeni {})

veya

GroupBy ("firstName asc", Cevabınız için yeni {})