C # неявная ошибка преобразования из общего списка в Ienumerable

#c# #linq

#c# #linq

Вопрос:

 public IEnumerable<XdbActiveDiscipline> GetAllDisciplineDocs(string projectNumber)
{
    try
    {
        // return _MigratorDBContext.XdbActiveDiscipline.Where(x => x.OtProjectNumber == projectNumber amp;amp; x.IsProcessed==null).ToList();
        var val = _MigratorDBContext.XdbActiveDiscipline.Where(x => x.OtProjectNumber == projectNumber amp;amp; x.IsProcessed == null).OrderBy(x => x.DocumentReference).GroupBy(x => new { x.DocumentReference, x.DocumentRevisionNumber, x.DocumentRevisionObject })
            .Select(g => new { g, count = g.Count() })
            .SelectMany(t => t.g.Select(b => b)
                .Zip(Enumerable.Range(1, t.count), (j, i) => new
                {
                    j.OtProjectNumber,
                    rn = i
                }))
            .ToList();

        return val;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        return null;
    }
}
 

возвращает значение: выдает ошибку

И код написан для добавления rownumber() значения в конце результирующего набора (т.е. разбиения на)

введите описание изображения здесь

Комментарии:

1. VAL ЯВЛЯЕТСЯ АНОНИМНЫМ, а не XdbActiveDiscipline. измените его на: .Zip(перечисляемый. Диапазон (1, т.е. количество), (j, i) => новый xdbactivedisciplineдисциплина(){…….

2. Ваш метод ожидает конкретный тип в вашем IEnumerable , но вы возвращаете anonymous тип, используя new {}

3. примечание; если ваш метод возвращает an IEnumerable<something> , нет необходимости вызывать ToList() результат запроса: пусть вызывающий объект сделает это, если это необходимо.

Ответ №1:

Val — это список анонимов, а не список < XdbActiveDiscipline > . Измените возврат действия на это:

 return val.Select( i=> new XdbActiveDiscipline{
Id=i.Id,
.... and so on
}).ToArray();
 

Ответ №2:

Возвращаемое значение не typeof(XdbActiveDiscipline) является . Как вы можете видеть, в сообщении об ошибке указано missing a cast? , что метод ожидает IEnumerable XdbActiveDiscipline возврата.

Элемент, который вы выбираете в linq запросе, имеет анонимный тип, отличный от ожидаемого возврата, это можно увидеть, если навести указатель мыши на значение при создании экземпляра.