我正在尝试更新一个EntityCollection

这是我的linq:

itemFromDb.MamConfigurationToBrowser_V1 =
                (EntityCollection<MamConfigurationToBrowser_V1>) itemFromDb.MamConfigurationToBrowser_V1
                                             .Select(browserEfItem =>
                                                     FillFromUi(browserEfItem,
                                                                item.MamConfigurationToBrowser_V1
                                                                .Single(browserUiItem => browserUiItem.BrowserVersionId == browserEfItem.BrowserVersionId)))
                                                                .ToList().AsEnumerable();


但是我得到一个运行时转换错误:


  无法转换类型的对象
  “ System.Collections.Generic.List 1[Conduit.Mam.MaMDBEntityFramework.MamConfigurationToBrowser_V1]' to type 'System.Data.Objects.DataClasses.EntityCollection 1 [Conduit.Mam.MaMDBEntityFramework.MamConfigurationToBrowser_V1]”。


这是为什么?当我对实体执行linq时,不是吗?

最佳答案

您正在使用Linq表达式中的倒数第二个呼叫List<MamConfigurationToBrowser_V1>创建一个ToList(),然后尝试将此列表转换为EntityCollection<MamConfigurationToBrowser_V1。我建议创建一个新的EntityCollection并将LINQ查询的结果添加到此集合中,如下所示:

var collection = new EntityCollection<MamConfigurationToBrowser_V1>();
var processedItems = itemFromDb.MamConfigurationToBrowser_V1
                                         .Select(browserEfItem =>
                                                 FillFromUi(browserEfItem,
                                                            item.MamConfigurationToBrowser_V1
                                                            .Single(browserUiItem => browserUiItem.BrowserVersionId == browserEfItem.BrowserVersionId)))
                                                            .ToList();
foreach(var item in processedItems)
{
    collection.Add(item);
}


重要提示:您的代码似乎将数据库问题与业务逻辑混合在一起,而且我个人从未在代码中直接使用EntityCollect<T>。我不知道您的上下文,但是也许您应该考虑使用“存储库和工作单元”模式。在Google上搜索它们。

关于c# - 无法从列表转换为EntityCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16129189/

10-10 05:06