0

首先,我的英语不是很好。所以我很抱歉。:)

我的问题作为标题。我的数据库上有两个表:

  • 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 回答