ElenaRez Ответов: 1

Проблема с одновременным перебором двух списков


Я внедряю asp.net ядро 3.1. я написал некоторый код, подобный следующему, и теперь я хочу получить результат этих двух запросов, который имеет одинаковый размер, и перебрать каждый из них, разделить их элемент и сохранить результат в списке. Но теперь проблема заключается в моем методе zip, я не могу точно указать, какой атрибут каждого запроса я хочу разделить.
Внутри корпуса по каждому элементу Р.Кол-во И р.Denum неизвестно! Я ценю любую помощь, чтобы исправить эту ошибку.

Что я уже пробовал:

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);
        }

1 Ответов

Рейтинг:
0

Richard Deeming

Ошибка не в этом r.Num и r.Denum неизвестны; ошибка заключается в том, что оператор деления не определен для анонимных типов.

Измените свой код на:

var res = mytotal.Zip(GrantedReqStatus, (n, d) => new { Num = n.Total, Denum = d.GrantedCount });
foreach (var r in res)
{
    GrantedAccessPercent.Add((double)r.Num / r.Denum);
}
Или, проще говоря:
var GrantedAccessPercent = mytotal.Zip(GrantedReqStatus, (n, d) => (double)n.Total / d.GrantedCount }).ToList();
NB: Вам нужно привести либо числитель, либо знаменатель к double перед делением, в противном случае результат будет усечен.