Я реализую asp. net основной проект. И у меня есть несколько таблиц с именами ApiApp , ApiAppHistory и Entity .
В ApiApp таблица, у меня есть дата поле типа string
(гггг / мм / дд) и поле ApplicantID
.
В ApiAppHistory есть поле с именем LastReqStatus , которое имеет тип int
, и его соответствующее значение хранится в Entity Таблица.
Теперь я хочу сгруппировать по Year
, Month
, LastReqStatus
и ApplicantID
, чтобы найти для каждого месяца из год на сколько ApplicantID
LastReqStatus
равно предоставлено .
И после нахождения этого я хочу узнать в среднем для каждого месяца года , что для всех ApplicantIDs
* lastReqStatus == "Granted"
.
Для первого я написал запрос, подобный следующему:
var avg = from t1 in _context.Apiapp
join t2 in _context.ApiAppHistory on t1.Id equals t2.ApiAppId
join t3 in _context.Entity on t2.LastReqStatus equals t3.Id
where t1.IsDeleted == false && t1.LastRequestStatus == t2.Id && t3.Name == "Granted"
group new {t1,t2}
by new { t2.LastReqStatus, Year = t1.ApiRequestDate.Substring(0, 4), Month = t1.ApiRequestDate.Substring(5, 2) , Applicant = t1.ApplicantId } into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
Applicant = g.Key.Applicant,
GrantedCount = g.Count()
};
var GrantedReqAVG = avg.ToList();
public partial class ApiApplicantHistory
{
public int Id { get; set; }
public int? SentType { get; set; }
public int? Reason { get; set; }
public int? LastReqStatus { get; set; }
public int? ApiAppId { get; set; }
public virtual Apiapp ApiApp { get; set; }
public virtual EntityType LastReqStatusNavigation { get; set; }
public virtual EntityType SentTypeNavigation { get; set; }
public virtual EntityType ReasonNavigation { get; set; }
}
public partial class EntityType
{
public EntityType()
{
ApiApplicantHistoryLastReqStatusNavigation = new HashSet<ApiApplicantHistory>(); ApiApplicantHistorySentTypeNavigation = new HashSet<ApiApplicantHistory>();
ApiApplicantHistoryReasonNavigation = new HashSet<ApiApplicantHistory>();
}
public int Id { get; set; }
public string Name { get; set; }
public string EntityKey { get; set; }
public virtual ICollection<ApiApplicantHistory> ApiApplicantHistoryLastReqStatusNavigation { get; set; } public virtual ICollection<ApiApplicantHistory> ApiAppHistorySentTypeNavigation { get; set; }
public virtual ICollection<ApiApplicantHistory> ApiAppHistoryReasonNavigation { get; set; }
}
}
public partial class Apiapp
{
public Apiapp()
{
ApiApplicantHistory = new HashSet<ApiApplicantHistory>();
}
public int Id { get; set; }
public bool? IsDeleted { get; set; }
public int? LastRequestStatus { get; set; }
public int ApplicantID { get; set; }
public string ApiRequestDate { get; set; }
public virtual ICollection<ApiApplicantHistory> ApiApplicantHistory { get; set; }
}
Но по поводу нахождения среднего у меня нет никакого мнения, как я могу сделай это. Я буду признателен, если кто-нибудь поможет мне.
Для экземпляра у меня есть следующие данные в таблице ApiApp :
ApiApp:
ID:1 LastRequestStatus:1 ApplicantID:1 ApiRequestDate:2019/02/03
ID:2 LastRequestStatus:2 ApplicantID:1 ApiRequestDate:2019/02/16
ID:3 LastRequestStatus:10 ApplicantID:2 ApiRequestDate:2019/02/01
ID:4 LastRequestStatus:19 ApplicantID:2 ApiRequestDate:2019/02/20
ID:5 LastRequestStatus:31 ApplicantID:2 ApiRequestDate:2019/02/29
Таким образом, среднее значение должно быть:
(2 + 3) / 2 это означает, что 2 для ID: 1 и ID: 2 с тем же Заявителем # 1, который запросил в феврале и 3 месяца для ID: 3 и ID: 4 и ID : 5 с тем же кандидатом № 2, который запросил в феврале месяце, и потому, что в феврале месяце есть только два кандидата № 1 и № 2, поэтому мы должны разделить числитель на 2.