无法从List转换为EntityCollection

时间:2013-04-21 08:09:52

标签: c# asp.net entity-framework

我正在尝试更新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,不是吗?

2 个答案:

答案 0 :(得分:2)

您正在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>。我不知道你的上下文,但也许你应该考虑使用Repository和Unit of Work模式。在Google上搜索它们。

答案 1 :(得分:0)

ItemFromDB是一个独特的对象?我的意思是如果itemFromDB不是一个列表,你就试图将一个唯一的对象转换为一个列表。

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