2

我正在尝试更新 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.EntityCollection1 [Conduit.Mam.MaMDBEntityFramework.MamConfigurationToBrowser_V1]”的对象。

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

4

2 回答 2

2

List<MamConfigurationToBrowser_V1>您正在使用 Linq 表达式中的倒数第二个调用创建一个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 上搜索它们。

于 2013-04-21T08:23:49.953 回答
0

ItemFromDB 是一个独特的对象吗?我的意思是,如果 itemFromDB 不是列表,那么您正在尝试将唯一对象转换为列表。

您可以尝试使用 .FirstOrDefault() 而不是 .ToList().AsEnumerable()。

于 2013-04-21T09:02:56.667 回答