我正在尝试从我的数据库中创建POCO列表。 POCO类有一个List<int>
属性,我想这样填充:
public List<Pocos.MyTable> GetData()
{
using (EFContext c = new EFContext())
{
var query = from t in c.MyTable
select new Pocos.MyTable()
{
MyId = t.MyId,
MyField = t.MyField,
MyRelationIds = t.MyRelations.Select(mr => mr.MyRelationId).ToList()
};
return query.ToList();
}
}
不幸的是,我在查询中的ToList()
上获得了“此方法无法转换为商店表达式”。我可以在这里做得很好,还是我必须做很多后续查询才能填充MyRelationIds
属性?
答案 0 :(得分:2)
根据您的代码和说明,如果尝试使用MyRelations
,则不会加载。然后你在查询期间尝试populeta MyRelationsIds
。有两种方法可以解决这个问题。我个人更喜欢第一个:
MyRelations
媒体资源替换为public virtual List<Relation> MyRelations
。虚拟是一种约定,在此之后EF将创建一个代理,它将充当惰性属性。即它会在您触摸后立即加载。另一种方法是使用预先加载,使用它你不必更改签名。
只需使用Include
方法,告诉EF您想要加载哪些道具。
请参阅.Include("MyRelations")
它告诉我,在此查询期间必须加载MyRelations。所以你以后可以使用它们。如果你想只有关系的id,那么你应该首先实现你的对象,然后进行映射(注意AsEnumerable()
)
using (EFContext c = new EFContext())
{
var query = from t in c.MyTable.Include("MyRelations").AsEnumerable()
select new Pocos.MyTable()
{
MyId = t.MyId,
MyField = t.MyField,
MyRelationIds = t.MyRelations.Select(mr => mr.MyRelationId).ToList()
};
return query.ToList();
}
答案 1 :(得分:0)
您是否尝试从行中删除“.ToList()”:
MyRelationIds = t.MyRelations.Select(mr => mr.MyRelationId).ToList()
所以它看起来像这样:
MyRelationIds = t.MyRelations.Select(mr => mr.MyRelationId)