0

まず、私の英語はあまり上手ではありません。申し訳ありません。:)

タイトルの通り私の質問です。データベースに 2 つのテーブルがあります。

  • Siniflar (SinifId、SinifAdi、Kapasite、OgretmenId)
  • Ogretmenler (OgretmenId、Ad、Soyad、Brans)

クエリ:

  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' 型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。

クエリに問題があると思います... var型にクエリを実行すると同じエラーが発生します...

4

2 に答える 2

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) で同じことを行うこともできますが、このクラスに必要なすべてのプロパティがあることを確認する必要があります。

于 2013-08-07T14:24:38.717 に答える
0

を使用するのではなく、new { property1, property2 }に新しい を作成Siniflarしますselect

例えば

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

注: lazyberezovsky が述べたようにSiniflar、プロパティが含まれていないため、マッピングに欠陥があるようAdです。

于 2013-08-07T14:24:48.013 に答える