2012-07-11 86 views
0

型號實體或複雜類型'xxx'不能在LINQ to Entities查詢中構造?

public partial class SayacOkumalariIstatistik 
{ 
    public string sno { get; set; } 
    public Nullable<System.DateTime> okuma_tarihi { get; set; } 
    public Nullable<decimal> TotalUsageValue { get; set; } 
    public string UsageType { get; set; } 
} 

功能

public IList<SayacOkumalariIstatistik> SayacOkumalariGetir() 
{ 
    #region linq concat 
    IEnumerable<SayacOkumalariIstatistik> sayac_okumalari_istatistik = entity.TblSayacOkumalari 
     .Select(x => new SayacOkumalariIstatistik 
     { 
      sno = x.sno.ToString() + "T1", 
      okuma_tarihi = x.okuma_tarihi, 
      TotalUsageValue = x.toplam_kullanim_T1, 
      UsageType = "T1" 
     }) 
     .Concat(entity.TblSayacOkumalari.Select(x => new SayacOkumalariIstatistik 
     { 
      sno = x.sno.ToString() + "T2", 
      okuma_tarihi = x.okuma_tarihi, 
      TotalUsageValue = x.toplam_kullanim_T2, 
      UsageType = "T2" 
     })) 
     .Concat(entity.TblSayacOkumalari.Select(x => new SayacOkumalariIstatistik 
     { 
       sno = x.sno.ToString() + "T3", 
       okuma_tarihi = x.okuma_tarihi, 
       TotalUsageValue = x.toplam_kullanim_T3, 
       UsageType = "T3" 
     })); 
     #endregion 

     // Error occurs in here 
     return sayac_okumalari_istatistik.ToList(); 
    } 

和錯誤消息是我的問題標題。爲什麼會發生此錯誤。

謝謝。

回答

2

錯誤消息是不言自明的。你不能,不應該用你的實體類作爲投影的DTO(我猜SayacOkumalariIstatistik是這樣一類)

您至少有3種選擇:

  1. 找回原來的實體,然後再使用Linq來對象進行投影(即在撥打ToList之後)。
  2. 創建一個DTO類(SayacOkumalariIstatistikViewModel,SayacOkumalariIstatistikDTO,無論),並在您的查詢中使用它。
  3. 使用匿名對象進行投影。
1

這樣做是爲了在Linq到實體和Linq到對象之間存在明確的區別/斷點。在Linq to Sql中,您可以輕鬆地在內存中執行大量操作,而不必在數據庫中執行任何代碼將要執行的操作。

您必須僅返回匿名類型,基元,實體類型或三者的組合。

相關問題