2013-08-07 49 views
0

首先,我的英語不是很好。所以我很抱歉。 :)如何使用通用的linq查詢結果?

我作爲標題的問題。我有我的數據庫中的兩個表:

  • Siniflar(SinifId,SinifAdi,Kapasite,OgretmenId)
  • Ogretmenler(OgretmenId,廣告,Soyad,布蘭斯)

查詢:

var siniflar = (from s in db.Siniflar 
        join o in db.Ogretmenler 
        on s.OgretmenId equals o.OgretmenId 
        select new { s.SinifId, s.SinifAdi, s.Kapasite, o.Ad }).ToList(); 

我想使用查詢的結果作爲通用,如下所示:

public List<Siniflar> SiniflariListele() 
    { 
    var siniflar = (from s in db.Siniflar 
        join o in db.Ogretmenler 
        on s.OgretmenId equals o.OgretmenId 
        select new { s.SinifId, s.SinifAdi, s.Kapasite, o.Ad }).ToList(); 
    return siniflar; 
    } 

但我得到一個錯誤。因爲結果是匿名類型。

錯誤:無法隱式轉換類型System.Collections.Generic.List<AnonymousType#1>System.Collections.Generic.List<Entity.Siniflar>

如何使用是通用的結果。我能做些什麼?


我改變了一個問題:

類:

public class RSiniflar 
{ 
    public int SinifId { get; set; } 
    public string SinifAdi { get; set; } 
    public int Kapasite { get; set; } 
    public string OgretmenAdiSoyadi { get; set; } 
} 

梅託德:

public List<RSiniflar> SiniflariListele() 
    { 
     List<RSiniflar> siniflar = (from s in db.Siniflar 
         join o in db.Ogretmenler 
         on s.OgretmenId equals o.OgretmenId 
         select new RSiniflar 
         { 
          SinifId = s.SinifId, 
          SinifAdi = s.SinifAdi, 
          Kapasite = s.Kapasite, 
          OgretmenAdiSoyadi = o.Ad + ' ' + o.Soyad 
         }).ToList(); 
     return siniflar; 
    } 

但現在的錯誤查詢:無法創建類型的恆定值「 System.Object的」。只有原始類型或枚舉類型在此上下文中受支持。

我想,有我的查詢問題...我得到一個錯誤,當相同的查詢變種型...

+0

我相信'Siniflar'實體沒有'Ad'屬性。你將如何返回它? –

+0

你需要RSiniflar的默認構造函數 –

回答

0

您可以返回類型列表,但不能返回的匿名列表類型。所以,你需要創建一個類,將處理結果:

public class A 
{ 
    public int SinifId { get; set; } 
    public int SiniAdi { get; set; } 
    public int Kapasite { get; set; } 
    public int Ad { get; set; } 
} 

,然後在查詢中使用它,而不是匿名對象:

public List<A> SiniflariListele() 
{ 
    var siniflar = (from s in db.Siniflar 
        join o in db.Ogretmenler 
        on s.OgretmenId equals o.OgretmenId 
        select new A { 
         SinifId = s.SinifId, 
         SinifAdi = s.SinifAdi, 
         Kapasite = s.Kapasite, 
         Ad = o.Ad 
        }).ToList(); 
    return siniflar; 
} 

你可以做同樣的與現有類(例如Siniflar),但您必須確定該課程具備所有必要的屬性。

+0

我改變了問題。你現在可以看看嗎? – mstfcck

0

而不是使用new { property1, property2 },請在您的select中創建新的Siniflar

E.g.

select new Siniflar() { 
    SinifId = s.SinifId, 
    SinifAdi = s.SinifAdi, 
    Kapasite = s.Kapasite }).ToList() 

注:如lazyberezovsky提到,你的映射似乎是有缺陷的,因爲Siniflar不包含財產Ad

+0

謝謝你的回答.. – mstfcck

+0

不客氣。請記住提供任何您發現有幫助的答案。 :) – Khan

+0

嗨再次, 我改變metod像quesiton:環路請... 但是,我再次收到一個錯誤:無法創建一個類型'System.Object'的常量值。只有原始類型或枚舉類型在此上下文中受支持。 請幫忙.. – mstfcck