如果我从IQueryable中选择,则Include将丢失

anonymous-types entity-framework include linq-to-entities

在对IQueryable查询执行选择后,include不起作用。这有什么方法吗?我的疑问是

public IQueryable<Network> GetAllNetworks()
{
    var query = (from n in _db.NetworkSet
                .Include("NetworkContacts.Contact")
                .Include("NetworkContacts.Contact.RelationshipSource.Target")
                .Include("NetworkContacts.Contact.RelationshipSource.Source")
                 select (n));        
    return query;;
}

然后我尝试使用以下代码在我的WebUI层中填充mya ViewModel

            var projectedNetworks =
            from n in GetAllNetworks()
            select new NetworkViewModel
            {
                Name = n.Name,
                Contacts = from contact in networkList
                    .SelectMany(nc => nc.NetworkContacts)
                    .Where(nc => nc.Member == true)
                    .Where(nc => nc.NetworkId == n.ID)
                    .Select(c => c.Contact)                        
                    select contact,
            };

        return projectedNetworks;

现在问题出现在我新创建的NetworkViewModel中.Contacts集合对象不包含RelationshipSource.Target或RelationshipSource.Source的任何已加载数据。

但是,从原始Repository IQueryable方法运行时,数据就存在。但是,相关的包含数据似乎没有转移到我使用上面的Select New NetworkViewModel {}代码时创建的新Contacts集合中。

有没有办法在传入新对象时保留此Include数据?目前我只是不断获得NULL异常

一般承认的答案

以下是对正在发生的事情的解释,并附带解决方法

但是,在您的情况下,我认为有一个比该链接文章更好的解决方法。您已经在使用Network的视图模型。非常好!这样做也可以用于联系(以及它的相关属性),并且你的急切加载问题会神奇地消失。投影始终有效。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因