当前位置:  开发笔记 > 编程语言 > 正文

如何构造LINQ to Entities查询以直接加载子对象,而不是调用Reference属性或Load()

如何解决《如何构造LINQtoEntities查询以直接加载子对象,而不是调用Reference属性或Load()》经验,为你挑选了1个好方法。

我是新手使用LINQ to Entities(或实体框架,无论他们调用它),我写了很多这样的代码:

var item = (from InventoryItem item in db.Inventory
            where item.ID == id
            select item).First();

然后像这样调用该对象上的方法:

var type = item.ItemTypeReference;

要么

var orders = item.OrderLineItems.Load();

检索子对象或相关对象.

我没有对数据库进行分析或挖得太深,但我的猜测是,当我调用.Load()或*Reference属性时,我实际上正在再次调用数据库.如果是这种情况,有没有办法在我的初始LINQ表达式中获取这些对象?



1> Robert Wagne..:

您希望在此"整形查询结果"文章中使用.Include(字符串)方法引用.

var item = from InventoryItem item in
              db.Inventory.Include("ItemTypeReference").Include("OrderLineItems")
           where item.ID == id
           select item;

包含也可能是"sql"样式语法.

另请参阅该文章有关从LINQ到SQL移动到LINQ到实体.

对于其他寻找Linq to SQL问题解决方案的人,您希望执行以下操作(替换DataContext和其他类型的任何内容):

using (DataContext db = new DataContext())
{
    DataLoadOptions options = new DataLoadOptions();
    options.LoadWith(ii => ii.ItemTypeReference);
    options.LoadWith(ii => ii.OrderLineItems);
    db.LoadOptions = options;

    var item = from InventoryItem item in db.Inventory
               where item.ID == id
               select item;
}

对于该特定上下文,每当加载父项(InventoryItem)时,这将加载LoadWith中指定的属性.

在回答James和Jesper的其他一些问题时,请查看这个问题

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有