В настоящее время у меня есть рабочий запрос, который извлекает данные из нескольких таблиц SQL для отображения в сетке пользовательского интерфейса kendo. Теперь мне было поручено добавить группировку в запрос, но я не смог успешно добавить группировку, которая будет возвращать данные. Все мои попытки до сих пор приводят к пустым наборам данных.
Я попытался добавить группу по выражению «group new {quotes, t, s, rfqStarred, ch} by new {quotes.QuoteExpirationTerm} в qgroup», что приводит к пустому набору данных. Я также не могу использовать какие-либо поля даты в запросе после добавления группировки.
По запросу возвращено более 100 полей, поэтому я удалил большинство, чтобы попытаться свести мой пример к минимуму.
Ниже приведен фрагмент рабочего запроса без группировки:
var query = from m in db.RfqQuoteIntermediates
from quotes in db.Quotes.Where(q => q.Id == m.QuoteId).DefaultIfEmpty()
from t in db.SEWPRfqs.Where(r => r.RfqId == m.RfqId).DefaultIfEmpty()
from s in db.RfqSupplementals.Where(x => x.RfqSeqNumber == t.RfqSeqNumber).DefaultIfEmpty()
from rfqStarred in db.RfqUserStarreds.Where(rs => rs.RfqSeqNumber == t.RfqSeqNumber && rs.SalesRep == salesrep).DefaultIfEmpty()
let ch = db.RfqsChangeHistories.Where(r => r.RfqRfiSeqNum == t.RfqSeqNumber && (r.Action == "RFQ marked 'Hot'" || r.Action == "RFQ unmarked 'Hot'" || r.Action == "Quote Close Date Change" || r.Action == "Hot Change Comment"
|| r.Action == "New Comment" || r.Action == "New RFQ Comment" || r.Action == "New Quote Comment" || r.Action == "Close Date Change Comment" || r.Action == "Stage Change Comment")).OrderByDescending(r => r.Id).FirstOrDefault()
where (whereSelector == "allPipelineRfqs"
|| (whereSelector == "pipelineRfqs" && (quotes.QuoteStage == "Pipeline" || quotes.QuoteStage == "Swing" || quotes.QuoteStage == "Forecast"))
|| (whereSelector == "closedWon" && quotes.QuoteStage == "Closed-Won")
|| (whereSelector == "closedLost" && quotes.QuoteStage == "Closed-Lost")
|| (whereSelector == "today" && quotes.QuoteDate.Date >= today)
|| (whereSelector == "thisWeek" && startOfWeek <= quotes.QuoteDate && quotes.QuoteDate < endOfWeek)
|| (whereSelector == "lastWeek" && startOfWeek <= quotes.QuoteDate && quotes.QuoteDate < endOfWeek))
&& (isAdmin || t.assignedTo == salesrep || t.secndAssignedTo == salesrep || t.addlAssignedTo == salesrep || agencies.Contains(t.Agency))
&& t.IsDeleted == false && t.IsInPipeline
select new PipelineDto()
{
RfqId = t.RfqId,
Contract = t.Contract,
RfqSeqNumber = t.RfqSeqNumber,
.... fields removed for example
IsInPipeline = t.IsInPipeline,
VendorRationale = t.VendorRationale,
LastUpdated = t.LastUpdated,
Acronym = s.AgencyAcronym,
SubAcronym = s.SubAgencyAcronym,
userstarred = rfqStarred != null,
QuoteId = quotes.Id,
QuoteNumber = quotes.QuoteNumber,
QuoteDate = quotes.QuoteDate.ToShortDateString(),
QuoteSalesContact = quotes.QuoteSalesContact,
QuotedBy = quotes.QuotedBy,
QuoteTotal = quotes.QuoteTotal,
QuoteExpirationTerm = quotes.QuoteExpirationTerm,
ActionInfo = s.ActionInfo,
AssignedDate = s.ActionInfoDate,
CommentNotificationLastViewed = db.RfqCommentNotifications.Where(r => r.RfqSequenceNum == t.RfqSeqNumber && r.SalesRep == salesrep).Select(d=>d.LastViewed).SingleOrDefault(),
CommentActionDate = ch.ActionDate,
CommentAction = ch.Action,
CommentActionBy = ch.ActionBy
};
Вот что у меня есть в моей нерабочей группе по запросу:
var query = from m in db.RfqQuoteIntermediates
from quotes in db.Quotes.Where(q => q.Id == m.QuoteId).DefaultIfEmpty()
from t in db.SEWPRfqs.Where(r => r.RfqId == m.RfqId).DefaultIfEmpty()
from s in db.RfqSupplementals.Where(x => x.RfqSeqNumber == t.RfqSeqNumber).DefaultIfEmpty()
from rfqStarred in db.RfqUserStarreds.Where(rs => rs.RfqSeqNumber == t.RfqSeqNumber && rs.SalesRep == salesrep).DefaultIfEmpty()
let ch = db.RfqsChangeHistories.Where(r => r.RfqRfiSeqNum == t.RfqSeqNumber && (r.Action == "RFQ marked 'Hot'" || r.Action == "RFQ unmarked 'Hot'" || r.Action == "Quote Close Date Change" || r.Action == "Hot Change Comment"
|| r.Action == "New Comment" || r.Action == "New RFQ Comment" || r.Action == "New Quote Comment" || r.Action == "Close Date Change Comment" || r.Action == "Stage Change Comment")).OrderByDescending(r => r.Id).FirstOrDefault()
where (whereSelector == "allPipelineRfqs"
|| (whereSelector == "pipelineRfqs" && (quotes.QuoteStage == "Pipeline" || quotes.QuoteStage == "Swing" || quotes.QuoteStage == "Forecast"))
|| (whereSelector == "closedWon" && quotes.QuoteStage == "Closed-Won")
|| (whereSelector == "closedLost" && quotes.QuoteStage == "Closed-Lost")
|| (whereSelector == "today" && quotes.QuoteDate.Date >= today)
|| (whereSelector == "thisWeek" && startOfWeek <= quotes.QuoteDate && quotes.QuoteDate < endOfWeek)
|| (whereSelector == "lastWeek" && startOfWeek <= quotes.QuoteDate && quotes.QuoteDate < endOfWeek))
&& (isAdmin || t.assignedTo == salesrep || t.secndAssignedTo == salesrep || t.addlAssignedTo == salesrep || agencies.Contains(t.Agency))
&& t.IsDeleted == false && t.IsInPipeline
group new {quotes, t, s, rfqStarred, ch} by new {quotes.QuoteExpirationTerm} into qgroup
select new PipelineDto()
{
RfqId = Convert.ToInt32(qgroup.Select(g => g.t.RfqId)),
Contract = qgroup.Select(g => g.t.Contract).ToString(),
RfqSeqNumber = qgroup.Select(g => g.t.RfqSeqNumber).ToString(),
//RFQ_RFIDate = Convert.ToDateTime(qgroup.Select(g=>g.t.RFQ_RFIDate), * everything below this wile not compile it I uncomment any of the dates.
BidStatus = qgroup.Select(g => g.t.BidStatus).ToString(),
ModLevel = qgroup.Select(g => g.t.ModLevel).ToString(),
//ModDate = Convert.ToDateTime(qgroup.Select(g=>g.t.ModDate)), * same here and next field.
//ReplyByDate = Convert.ToDateTime(qgroup.Select(g=>g.t.ReplyByDate),
.... the rest of the fields
};
Как выполнить группировку по кавычкам. QuoteExpirationTerm (int со значением 30, 60 или 90 дней), который будет возвращать данные и что мне нужно изменить в полях даты, чтобы иметь возможность включать даты в запрос.
Ожидаемые результаты - группировки по 30, 60 и 90 дням, но пока я могу получить только пустые наборы данных.
Может ли кто-нибудь указать мне правильное направление?