gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:55:34 24 4
gpt4 key购买 nike

我刚开始使用 LINQ to Entities(或 Entity Framework,不管他们怎么调用它),我正在编写很多这样的代码:

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

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

var type = item.ItemTypeReference;

var orders = item.OrderLineItems.Load();

检索子对象或相关对象。

我没有分析数据库或挖掘得太深,但我的猜测是,当我调用 .Load() 或 *Reference 属性时,我实际上是在对数据库进行另一个调用。如果是这种情况,是否有任何方法可以在我的初始 LINQ 表达式中获取这些对象?

最佳答案

您想在此 "Shaping query results" 中使用 .Include(string) 方法引用文章。

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

Includes 可能也有一个“sql”风格的语法。

另见 article关于从 LINQ-to-SQL 迁移到 LINQ-to-Entities。

对于正在为 Linq to SQL 寻找此问题的解决方案的其他人,您需要执行以下操作(用 DataContext 和其他类型替换您拥有的任何类型):

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

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

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

为了回答 James 和 Jesper 的一些进一步问题,请查看此 question

关于c# - 如何构建 LINQ to Entities 查询以直接加载子对象,而不是调用 Reference 属性或 Load(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/315966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com