首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >实体框架核心发送到生成的SQL中。

实体框架核心发送到生成的SQL中。
EN

Stack Overflow用户
提问于 2020-04-17 04:41:35
回答 1查看 90关注 0票数 0

是否可以使用实体框架核心将DISTINCT关键字发送到生成的SQL命令中?在获取不同的值时,我看到的所有示例都是在值被重新整理之后调用.Distinct(),因此数据库正在发送大量数据,而数据库可以自己完成不同的操作。

这将适用于一个匿名对象,其中包含许多值,从ints到字符串和字节数组。

我知道我可以做.GroupBy().Select(),但这还是在数据到达之后,而不是以前。

示例不适用于匿名类型:

代码语言:javascript
代码运行次数:0
运行
复制
(From a In DatabaseContext.Associate
 Join ac In DatabaseContext.AssociateClassification On ac.AssociateId Equals a.AssociateId
 Join ad In DatabaseContext.AssociateDepartment On ad.AssociateId Equals a.AssociateId
 Join ass In DatabaseContext.AssociateScheduleStaffing On ass.AssociateId Equals a.AssociateId
 Group Join ap In DatabaseContext.AssociatePhoto On ap.AssociateId Equals a.AssociateId Into apg = Group
 From ap In apg.DefaultIfEmpty()
 Where ac.ClassificationId.Value = ClassificationId AndAlso
       a.Inactive.Value = Convert.ToByte(0) AndAlso
       departments.Contains(ad.Department) AndAlso
       ass.UseJbDev.Value = Convert.ToByte(1) AndAlso
       Not DatabaseContext.Schedule.Any(Function(s) s.AssociateId = a.AssociateId AndAlso s.StartTime.Value >= Day AndAlso s.StartTime.Value < Day.AddDays(1))
 Select a.AssociateId, a.AssociateNumber, a.FullName, a.Inactive, ap.Photo, ass.DateSeniority).Distinct().ToList()

FYI:如果我删除了和ass.DateSeniority,那么所有对象都是“关联”类型,并且不同的工作方式,那么它就可以执行了。

但是,这是在事实之后,因为当查看创建的SQL时,它不是一个选择不同的,也不是在SQL中出现的不同。

EN

回答 1

Stack Overflow用户

发布于 2020-04-24 19:53:25

在我看来,答案似乎是“不同”的扩展方法不能比较复杂类型对象的值。为了比较复杂类型的值,我需要实现IEqualityComparer<T>接口。

这就是为什么如果对象的所有属性都来自同一类型,那么当您混合属性并创建匿名类型时,内置的比较器无法工作,需要实现您自己的比较器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61264287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档