我们如何通过EF LINQ语句分配一个Observable集合

时间:2012-05-17 21:02:02

标签: c# linq entity-framework linq-to-entities

是否可以使用实体框架将数据库实体的集合分配给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集合。是否可以优雅地分配它而不使用临时变量。

1 个答案:

答案 0 :(得分:2)

听起来你正在使用普通的LINQ来混淆LINQ to Entities / SQL。请记住,当您使用EF时,您编写的任何LINQ查询都必须转换为SQL。因此,无论您需要对从SQL数据库返回的数据执行的任何对象转换,都需要由EF直接支持。这包括ToList(),ToArray()等,但不包括您自己的自定义扩展。

我认为你在这里做的最好是先查询数据库(你可以使用ToList()以便查询执行),然后在ObservableCollection的构造函数中使用该结果列表(或调用你的ToObservableCollection()扩展方法。