如何解决我可以在 EF Core 中混合使用 LINQ 和 Fluent 语法吗?
我有以下查询效果很好(因为它生成了正确的 SQL 命令):
var sites = from sm in this.context.SiteMemberships
join s in this.context.Sites on sm.SiteUid equals s.SiteUid
join sd in this.context.SiteData on s.SiteUid equals sd.SiteUid
join p in this.context.Providers on s.ProviderUid equals p.ProviderUid
join r in this.context.Regions on p.RegionUid equals r.RegionUid
join o in this.context.Offices on s.OfficeUid equals o.OfficeUid
join u in this.context.Users on sm.UserUid equals u.UserUid
where
u.Email == userEmail ||
EF.Functions.Like(s.Classification,"117400-74%")
select new {
s.Field1,sd.Field2,p.Field3
};
如您所见,这是一个复杂的查询,尝试使用 Fluent API 非常很麻烦。但是,我希望“Where”子句是可编程的。根据当前用户具有的功能,他们应该能够根据不同的条件进行搜索。 1 级支持人员只能搜索与“分类”字段完全匹配的内容,但 2 级支持人员可以搜索通配符。
有什么方法可以混合语法。我想要的是这样的:
var (sites = from sm in this.context.SiteMemberships
join s in this.context.Sites on sm.SiteUid equals s.SiteUid
join sd in this.context.SiteData on s.SiteUid equals sd.SiteUid
join p in this.context.Providers on s.ProviderUid equals p.ProviderUid
join r in this.context.Regions on p.RegionUid equals r.RegionUid
join o in this.context.Offices on s.OfficeUid equals o.OfficeUid
join u in this.context.Users on sm.UserUid equals u.UserUid)
.Where(g => this.GetSearchCriteria(g))
.Select(g => g);
解决方法
您需要在最后一个 select new { s,sd,p,r,o,u }
之后添加 join
var sites = (from sm in this.context.SiteMemberships
join s in this.context.Sites on sm.SiteUid equals s.SiteUid
join sd in this.context.SiteData on s.SiteUid equals sd.SiteUid
join p in this.context.Providers on s.ProviderUid equals p.ProviderUid
join r in this.context.Regions on p.RegionUid equals r.RegionUid
join o in this.context.Offices on s.OfficeUid equals o.OfficeUid
join u in this.context.Users on sm.UserUid equals u.UserUid
select new { s,u })
.Where(g => this.GetSearchCriteria(g))
.Select(g => g);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。