当前位置: 首页 > 编程语言 > C#

LINQ表达式语法如何与Include()一起用于预加载Share

时间:2023-04-10 19:26:41 C#

LINQ表达式语法如何与Include()一起用于预加载Actions有一个导航属性,User(Action.User)1)我的基本查询:从ainActionsjoinuinUsersona.UserIdequalsu.UserIdselecta2)Firstattempt:fromainActions.Include("User")加入Usersona.UserId等于u.UserId选择a但Action.User未填充。3)尝试将'User'加载到查询之外的导航属性中:(从ainActionsjoinuinUsersona.UserIdequalsu.UserIdselecta).Include(“User”)在LINQPad中我尝试包含Got错误:“System.Linq.IQueryable”不包含“Include”的定义,并且找不到接受“System.Linq.IQueryable”类型的第一个参数的扩展方法“Include”(按F4添加使用指令或过程集参考)我认为这是因为LINQ不支持Include()。所以我在VS中尝试了它;查询2运行,但返回未填充的用户属性。Query3扩展方法似乎不存在,尽管它确实存在于没有Query的Action本身中。我弄明白了,谢谢你的建议。解决方案是这样做(我的问题中的第二次尝试):varqry=(fromainActionsjoinuinUsersona.UserIdequalsu.UserIdselecta).Include("User")IntellisenseisinThereasontheincludes在查询后没有出现是因为我需要使用以下内容:usingSystem.Data.Entity;一切都很好。如果您想要的是一个查询,该查询将通过Action.UserId外键属性返回其关联的User实体实际存在的所有Action实体,这将执行以下操作:varresults=context.Actions.Include("User").Where(action=>context.Users.Any(user=>user.UserId==action.UserId));但是,您不必使用外键属性进行过滤,因为您也有导航属性。因此,您可以通过过滤Action.User导航属性来简化查询,如本例所示:varresults=context.Actions.Include("User").Where(action=>action.User!=null);如果您的模型声明Action.User属性永远不能为空(即Action.UserId外键在数据库中不可为空),而您实际上想要的是所有Action实体及其关联的用户,那么查询变得更简单varresults=context.Actions.Include("用户");更好的是,使用System.Data.Entity重构友好代码(EF6);[...]varx=(来自context.ShoppingCarts中的购物车,其中table.id==123选择购物车)。包括(t=>t.CartItems);或varx=fromcartincontext.ShoppingCarts.Include(nameof(ShoppingCart.CartItems))wheretable.id==123selectcart;2017年3月31日更新您还可以在lambda语法中使用includeinlambda语法:varx=fromcartincontext.ShoppingCarts.Include(p=>p.ShoppingCart.CartItems))wheretable.id==123selectcart;执行已发布问题中提到的基本查询,您将无法看到用户属性,除非您返回这样的匿名类型:fromainActionsjoinuinUsersona.UserIdequalsu.UserIdselectnew{actionUserId=a.用户名。..userProperty1=u.UserId};但是,要在ObjectContext上使用Include方法,您可以使用以下方法:确保您拥有关闭延迟加载:entities.ContextOptions.LazyLoadingEnabled=false;然后继续varbar=entities.Actions.Include("User");varfoo=(fromainbarselecta);我使用LoadWith选项vardataOptions=newSystem.Data.Linq.DataLoadOptions();dataOptions.LoadWith(ac=>as.User);ctx.LoadOptions=数据选项;ctx是您的DataContext。这对我有用:-)以上是C#学习教程:HowLINQexpressionsyntaxisusedwithInclude()topreloadthewholecontentoftheshare。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢