entity-framework - 我应该如何在 linq 中获得不同的记录?

标签 entity-framework linq linq-to-sql entity-framework-6

您好,我已尝试以下查询来获取不同的记录,但我无法从以下查询中获取不同的记录。

var query = (from sr in db.StudentRequests
            join r in db.Registrations on sr.RegistrationId equals r.RegistrationId
            join cc in db.Campus on r.CampusId equals cc.CampusId
            join c in db.Classes on sr.ClassId equals c.ClassId
            from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty()
            from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty()
            from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty()
            where tc.RegistrationId == registrationid
            select new
            {
                StudentRequestId = sr.StudentRequestId,
                RegistrationId = sr.RegistrationId,
                Location = sr.Location,
                PaymentMethod = sr.PaymentMethod,
                CreatedOn = sr.CreatedOn,
                ClassName = c.ClassName,
                CampusName = cc.CampusName,
                StatusId = tsr.StatusId == null ? 1 : tsr.StatusId,
                Time = db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId)
                        .Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime)
            }).Distinct().ToList().ToPagedList(page ?? 1, 3);

但是我收到错误

The 'Distinct' operation cannot be applied to the collection ResultType of the specified argument.\r\nParameter name: argument

所以我从上面的查询中删除了 .Distinct() ,并在该代码下面我编写了代码

 query = query.Distinct().ToList();

但仍然显示重复记录

enter image description here

所以我尝试了 Group by 子句来获取不同的记录,但在那里我也面临着这个问题。请查看下面的代码

query = query.ToList().GroupBy(x => new { x.StudentRequestId, x.StatusId, x.Location, x.RegistrationId, x.PaymentMethod, x.CreatedOn, x.ClassName, x.CampusName})
.Select(group => new
{
    StudentRequestId = group.Key.StudentRequestId,
    StatusId = group.Key.StatusId,
    Location = group.Key.Location,
    RegistrationId = group.Key.RegistrationId,                                    
    PaymentMethod = group.Key.PaymentMethod,
    CreatedOn = group.Key.CreatedOn,
    ClassName = group.Key.ClassName,
    CampusName = group.Key.CampusName,                                   
    Time1 = group.Key.Time
});

但是我收到时间错误 enter image description here

如何获得独特的值(value)? 另请注意我在查询中使用 ToPagedList

实际问题来自“时间”列,如果我删除该列,所有事情都会正常工作。

最佳答案

按照 @Rajaji 的建议,我在查询末尾添加了 Group by 子句,这对我有用。

 var query = (from sr in db.StudentRequests
             join r in db.Registrations on sr.RegistrationId equals r.RegistrationId
             join cc in db.Campus on r.CampusId equals cc.CampusId
             join c in db.Classes on sr.ClassId equals c.ClassId
             from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty()
             from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty()
             from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty()
             where tc.RegistrationId == registrationid
             select new
             {
               StudentRequestId = sr.StudentRequestId,
               RegistrationId = sr.RegistrationId,
               Location = sr.Location,
               PaymentMethod = sr.PaymentMethod,
               CreatedOn = sr.CreatedOn,
               ClassName = c.ClassName,
               CampusName = cc.CampusName,
               StatusId = tsr.StatusId == null ? 1 : tsr.StatusId,
               Time = db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId).Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime)
               }).ToList().GroupBy(p => new { p.StudentRequestId }).Select(g => g.First()).ToList();

关于entity-framework - 我应该如何在 linq 中获得不同的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187583/

相关文章:

c# - 动态 LINQ 日期时间比较字符串构建 - Linq To Entities

c# - 关于 IEnumerable 的延迟执行

c# - Linq : To join or not to join (which is the better way, 联接或关系)

c# - 我可以从使用 Linq to sql 的过程中接收返回值和结果集吗?

entity-framework - Entity Framework 与 `virtual` 的混淆

c# - 如何使用单独的逗号 (,) 绑定(bind)下拉列表中的两列值

c# - Entity Framework 的 Repository + UnitOfWork 模式

asp.net - 将多个数据源组合到一个 ASP.NET 转发器?

c# - 如何转换以下 ino lambda 表达式(方法语法)?

c# - 动态 Linq : How to specify the StringComparison type?