首先,我的英语不是很好。所以我很抱歉。 :)
我的问题是标题。我的数据库上有两个表:
查询:
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; }
}
Metod:
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 type时出现错误...
答案 0 :(得分: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
)执行相同的操作,但您必须确保此类具有所有必需的属性。
答案 1 :(得分:0)
而不是使用new { property1, property2 }
,而是在Siniflar
中创建新的select
。
E.g。
select new Siniflar() {
SinifId = s.SinifId,
SinifAdi = s.SinifAdi,
Kapasite = s.Kapasite }).ToList()
注意:正如lazyberezovsky所提到的,您的映射似乎存在缺陷,因为Siniflar
不包含属性Ad
。