是否可以使用实体框架将数据库实体的集合分配给ObservableCollection?
这是iv到目前为止尝试过的 我尝试使用构造函数将列表转换为ObsrvableCollection。但LINQ不允许接受参数的构造函数。
为Ienumerable创建一个名为ToObservable collection的扩展名。但EF无法识别这一点。
还有其他优雅的解决方案。 以下是我正在使用的代码......并且失败
using (var db = new clientEntities())
{
var data = from p in db.CLIENTs
select new Contracts.Client()
{
ClientID = p.CLIENT_ID,
FirstName = p.FIRST_NAME,
PayInfo = new ObservableCollection<PayInfo>(p.PAY_INFO.Select(n=> new PaymentInfo(){
PayID=n.ID
}))
};
}
PayInfofield是一个Observable集合。是否可以优雅地分配它而不使用临时变量。
答案 0 :(得分:2)
听起来你正在使用普通的LINQ来混淆LINQ to Entities / SQL。请记住,当您使用EF时,您编写的任何LINQ查询都必须转换为SQL。因此,无论您需要对从SQL数据库返回的数据执行的任何对象转换,都需要由EF直接支持。这包括ToList(),ToArray()等,但不包括您自己的自定义扩展。
我认为你在这里做的最好是先查询数据库(你可以使用ToList()以便查询执行),然后在ObservableCollection的构造函数中使用该结果列表(或调用你的ToObservableCollection()扩展方法。