0

モデル

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();
    }

そして、エラーメッセージは私の質問のタイトルです。このエラーが発生する理由。

ありがとう。

4

2 に答える 2

2

エラーメッセージは一目瞭然です。エンティティ クラスをプロジェクション DTO として使用することはできませんし、使用すべきではありません (SayacOkumalariIstatistikそのようなクラスだと思います) 。

少なくとも 3 つの選択肢があります。

  1. 最初に元のエンティティを取得してから、Linq を使用してオブジェクトへの射影を行います (つまり、ToList呼び出しの後)。
  2. DTO クラス ( SayacOkumalariIstatistikViewModelSayacOkumalariIstatistikDTO、何でも) を作成し、それをクエリで使用します。
  3. プロジェクションに匿名オブジェクトを使用します。
于 2012-07-11T14:10:12.940 に答える
1

これは、Linq to Entities と Linq to objects の間に明確な区別/ブレークポイントがあるようにするために行われました。Linq to Sql では、大規模な操作をデータベースではなくメモリ内で簡単に行うことができ、コードがそれを実行するという考えがまったくありませんでした。

匿名型、プリミティブ、エンティティ型、または 3 つの組み合わせのみを返す必要があります。

于 2012-07-11T14:12:59.820 に答える