Проблема с итерацией по двум спискам одновременно - PullRequest
0 голосов
/ 02 мая 2020

Я использую ASP. NET Core 3.1. Я написал некоторый код, подобный следующему, и теперь я хочу получить результат этих двух запросов, которые имеют одинаковый размер, перебрать каждый из них, разделить их элемент и сохранить результат в списке. Но теперь проблема в моем методе zip, я не могу точно указать, какой атрибут каждого запроса я хочу разделить.

var mytotal = _context.Apiapp.GroupBy(o => new
        {
            Month = o.ApiRequestDate.Substring(4, 2),
            Year = o.ApiRequestDate.Substring(0, 4)
        }).Select(g => new
        {
            Month = g.Key.Month,
            Year = g.Key.Year,
            Total = g.Count()
        }).OrderByDescending(a => a.Year).ThenByDescending(a => a.Month).ToList();

var numerator =  from t1 in _context.Apiapp
                 join t2 in _context.ApiAppHistory on t1.Id equals t2.ApiApplicantId
                 join t3 in _context.EntityType on t2.LastReqStatus equals t3.Id
                 where t1.IsDeleted == false && t1.LastRequestStatus == t2.Id && t3.Name == "granted"
                 group new { Year = t1.ApiRequestDate.Substring(0, 4), Month = t1.ApiRequestDate.Substring(4, 2) }
                         by new { t2.LastReqStatus } into g
                 select new
                         {
                             Year = g.Max(n => n.Year),
                             Month = g.Max(n => n.Month),
                             GrantedCount = g.Count()
                         };
var GrantedReqStatus = numerator.ToList();
var GrantedAccessPercent = new List<Double>();

//-------------------------------------------------------
var res = mytotal.Zip(GrantedReqStatus, (total, GrantedCount) => new { Num = total, Denum = GrantedCount });

foreach(var r in res)
{
    GrantedAccessPercent.Add(r.Num/r.Denum);
}

Здесь, внутри тела foreach, r.Num и r.Denum неизвестны ! Я ценю любую помощь, чтобы исправить ошибку.

1 Ответ

1 голос
/ 03 мая 2020

Num и DemNum в функции Zip представляют объекты для первой и второй коллекции, которые содержат Month, Year и Total для объекта total и Month, Year и GrantedCount для объекта grantedCount.
Вы можете использовать total.Total и grantedCount.GrantedCount для получения чисел, например, следующий код:

var res = mytotal.Zip(GrantedReqStatus, (total, grantedCount) => new { Num = total.Total, Denum = grantedCount.GrantedCount });

foreach(var r in res)
{
    GrantedAccessPercent.Add(Math.Round(r.Num / (double)r.DemNum, 2));
}

Обратите внимание, что для деления int1/int2 вам нужно привести int2 к double, даст ожидаемый результат, и вы также можете использовать Math.Round для указания чисел после запятой.

Надеюсь, это поможет вам решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...