Entity framework 如何在linq查询中获得不同的记录
您好,我已尝试在下面的查询中获取不同的记录,但无法从下面的查询中获取不同的记录Entity framework 如何在linq查询中获得不同的记录,entity-framework,linq,linq-to-sql,entity-framework-6,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
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);
但我也有错误
“Distinct”操作无法应用于集合
指定参数的结果类型。\r\n参数名称:参数
因此我从上面的查询中删除了.Distinct(),并在该代码下面编写了代码作为
query = query.Distinct().ToList();
但仍然出现了重复记录
所以我尝试了按子句分组以获得清晰的记录,但在那里我也面临着这个问题。请查看下面的代码
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
});
但我得到了错误的时间
如何获得不同的值?
还请注意,我在查询中使用了ToPagedList
实际问题来自时间列,如果我删除该列,所有事情都会正常进行。我在查询末尾添加了Group by子句,正如@Rajaji所建议的那样,这对我来说很有效
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();
而不是使用…GroupBy().Select(g=>g.First()).ToList()@为我工作的Rajaji,谢谢。