c# - 可选加入 Entity Framework

标签 c# linq entity-framework

我有一种情况,当我必须将多个表中的数据加载到单个对象中时,即我有单独的表用于 BasicProperties 和几种“高级”属性`(我不允许重构数据库或对象模型)。

但是,由于加载高级属性的开销很大,而且在大多数情况下是不必要的,所以我想省略它,除非明确指定。

我目前拥有的是这样的:

  from basics in ctx.Basics
    join numerics in ctx.Numerics on basics.ID equals numerics.ItemID
    join alphas in ctx.Alphas on basics.ID equals alphas.Itemid
    join cplx in ctx.Complex on basics.ID equals cplx.Itemid into complex
  select new HodgePodge
             {
               Basics = basics,
               Numerics = numerics,
               Alphas = alpha,
               Complex = complex
             };

所以我需要一些(简单的)方法来包含/排除 NumericsAlphasComplex 数据库表的加载。

基本上,我是这个试图优化加载代码的项目的“客人”,所以我不允许对代码进行过多更改,最坏情况下的性能必须至少保持不变。

最佳答案

您可以将您的join 逻辑移动到select 语句中,并根据您的关系类型(1:1, 1:*)您使用 FirstOrDefaultWhere

bool loadNumerics = true;
bool loadAlphas  = true;
bool loadComplex = true;

var query = from basics in ctx.Basics
            select new HodgePodge
            {
               Basics = basics,
               Numerics = ctx.Numerics.FirstOrDefault(x => loadNumerics == true && basics.ID == x.ItemID),
               Alphas = ctx.Alphas.FirstOrDefault(x => loadAlphas == true && basics.ID == x.Itemid),
               Complex = ctx.Complex.Where(x => loadComplex == true && basics.ID == x.Itemid),
            };

关于c# - 可选加入 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379933/

相关文章:

c# - 如何恢复具有地形类型(水、森林、平原..)Google/Bing map 的 2D map ?

c# - 使用 Webbrowser C# 从 iframe 读取 HTML 代码

c# - 在 aspxGridview 中插入和编辑 Devexpress 中显示的模板

javascript - LINQ WHERE 子句等效于 javascript

linq - NHibernate Linq 提供程序中的 Fetch 与 FetchMany

entity-framework - EF6.0 “The relationship could not be changed because one or more of the foreign-key properties is non-nullable”

database - Entity Framework - 查询远程数据库时性能不佳

c# - 向基本类型添加自定义永久/临时行为

C#:委托(delegate),紧凑访问者, "universal callable"参数类型

entity-framework - "update-database" Entity Framework 代码先不加表