SORU
10 ŞUBAT 2009, Salı


Anonim tür sonuçlar döndürür?

Aşağıda basit bir örnek kullanarak birden çok tablo için SQL Etmeniz kullanarak sonuçları döndürmek için en iyi yolu nedir?

Demek iki tablo var:

Dogs:   Name, Age, BreedId
Breeds: BreedId, BreedName

Onların tüm köpekler BreedName iade etmek istiyorum. Tüm köpekler herhangi bir sorun ile bu gibi bir şey kullanarak almak zorundayım

public IQueryable<Dog> GetDogs()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select d;
    return result;
}

Ama eğer istersem ırkları ve Köpekler ile ilgili sorunlar var, bu deneyin:

public IQueryable<Dog> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result;
}

Şimdi derleyici Köpekler bekliyor olduğu için bana anonim türleri kümesi döndürür izin vermiyor, ama orada özel bir tür oluşturmak zorunda kalmadan bu dönmek için bir yol olduğunu fark ettim? Veya DogsWithBreedNames benim de bir sınıf oluşturun ve seçin türünü belirtmek zorunda mıyım? Yoksa başka bir kolay yolu var mı?

CEVAP
10 ŞUBAT 2009, Salı


Bu modeli öneririm:

public class DogWithBreed
{
    public Dog Dog { get; set; }
    public string BreedName  { get; set; }
}

public IQueryable<DogWithBreed> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new DogWithBreed()
                        {
                            Dog = d,
                            BreedName = b.BreedName
                        };
    return result;
}

Fazladan bir sınıf var demektir, ama kod için kolay, kolayca genişletilebilir, yeniden kullanılabilir ve tip-güvenli bir yerde.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • The Dubstep FX

    The Dubstep

    5 Mart 2011