C#

2014-05-22 5 views
5

yönteminde bir listeden bir liste döndürme LINQ ile SQLquery arasındaki sonucu içeren bir listeyi nasıl döndürebilirim? Bu uygulamayı deniyorum ama bu hatayı aldım.C#

dolaylı tip 'System.Collections.Generic.List<AnonymousType#1>' Herhangi bir yardım mutluluk duyacağız 'System.Collections.Generic.List<object>

dönüştürmek olamaz.

public List<Object> getShoes() 
{ 
    var query = from b in db.BrandTbls.AsQueryable() 
       join m in db.ShoeModelTbls on b.BrandID equals m.BrandID 
       join s in db.ShoeTbls on m.ModelID equals s.ModelID 
       join i in db.ShoeImageTbls on s.ShoeID equals i.ShoeID 
       select new { s.ShoeID, s.Size, s.PrimaryColor, s.SecondaryColor, s.Quantity, m.ModelName, m.Price, b.BrandName, i.ImagePath }; 

    return query.ToList(); 
} 
+2

için değiştirecek

public class MyResult { public string ShoeID {get; set;} public string Size {get; set;} public string PrimaryColor {get; set;} public string SecondaryColor {get; set;} public string Quantity {get; set;} public string ModelName {get; set;} public string Price {get; set;} public string BrandName {get; set;} public string ImagePath {get; set;} } 

o zaman

select new MyResult { ShoeID = s.ShoeID, Size = s.Size, PrimaryColor = s.PrimaryColor ........ }; 

ve yöntem imzası gibi seçkin değiştirmek bir sınıf oluşturabilir (t => (nesne) t) .ToList(); '. –

+1

@UlugbekUmirov Ardından, derlenecek, ancak bu yöntemin kullanıcıları etkin bir şekilde kullanamayacaklar. – Servy

+0

Başvuru için bu [eski yanıt] 'ı (http://stackoverflow.com/a/6830406/982431) de kontrol edin ... – HuorSwords

cevap

13

Anonim tipler, tamamen tanımlandıkları kapsam dahilinde kullanılmak üzere özel olarak tasarlanmıştır. Sorgunun sonuçlarını bu yöntemden döndürmek isterseniz, sorgunuzun sonuçlarını göstermek için adlandırılmış yeni bir tür oluşturmalı ve adsız türün örneklerini değil, söz konusu adlandırılmış türün örneklerini seçmelisiniz.

+0

Anladım! Teşekkürler. Servinin açıklamalarını tamamlayacak kod için – Tartar

3

T'nin anonim bir tür olduğu bir Listeyi geri dönemezsiniz; Bilinen bir tür döndürmeniz gerekiyor. Sen query.Select `yapmak dönebilirsiniz

public List<MyResult> getShoes() 
+0

+1. –

+0

+1. Çok hassas olmak için aslında "T'nin anonim bir tür olduğu liste" yi döndürebilirsiniz, ancak bu türden olmayan bir yöntemi de yöntemin dışında geçirmeniz gerekir. 'List MyMethod (T sahte) {return Enumerable.Repeat (yeni {Alan1: 100}, 10) .ToLsit();} ... var list = MyMethod (yeni {Alan1 = 42})' –