Web API не может неявно преобразовать тип 'System.Collections.Generic.List << анонимный тип: - PullRequest
0 голосов
/ 28 июня 2018

Я создаю Web API. Я знаю, что об этом задано много вопросов, но я попробовал их решение, но у меня не получилось. Я объявляю список, который буду использовать в нескольких точках моего списка.

public HttpResponseMessage GetDetails(string msn, DateTime dt)
{
   try
    {
          var mainDetails= new List<string>();

          int mainCount = giveMainCount(msn, dt);

           if(mainCount==0)
           {
              // here I want to set the list empty like mainDetails = null or "" like this
           }

            int mainInterval = mainCount / 500;

            mainDetails = kesc.tj_xhqd
                         .AsNoTracking()
                         .Where(m => (m.zdjh == msn) && (m.sjsj >= dt))
                         .AsEnumerable()
                         .Select((x, i) => new { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
                         .Where(x => x.i % mainInterval == 0)
                         .ToList(); // here I am getting error 
       return Request.CreateResponse(HttpStatusCode.OK, new { details = mainDetails });

    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }


    }
}

Ошибка

Не удается неявно преобразовать тип 'System.Collections.Generic.List << анонимный тип: строка MSN, System.DateTime? PingDateTime, строка PingValue, int i >> 'в' System.Collections.Generic.List '

Как мне избавиться от этой ошибки?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я нашел решение, и оно работает для меня

Изменено

var mainDetails= new List<tj_xhqd>();

К

IEnumerable mainDetails= new List<tj_xhqd>();

Сделав это, я избавился от своей ошибки

Для более подробной информации, можно проверить здесь

0 голосов
/ 28 июня 2018

Вариант 1

Вы можете пойти, не объявляя mainDetails с самого начала, сделав что-то вроде:

public HttpResponseMessage GetDetails(string msn, DateTime dt)
{
    try
    {
        int mainCount = giveMainCount(msn, dt);

        if (mainCount == 0)
        {
            return Request.CreateResponse(HttpStatusCode.OK, new { details = null });
        }

        int mainInterval = mainCount / 500;

        var mainDetails = kesc.tj_xhqd
                        .AsNoTracking()
                        .Where(m => (m.zdjh == msn) && (m.sjsj >= dt))
                        .AsEnumerable()
                        .Select((x, i) => new { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
                        .Where(x => x.i % mainInterval == 0)
                        .ToList();

        return Request.CreateResponse(HttpStatusCode.OK, new { details = mainDetails });

    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }
}

Делая это таким образом, mainDetails будет тем, что вы хотите, List этого анонимного типа с псевдонимами.


Вариант 2

В качестве альтернативы вы можете создать класс для псевдонимов (используйте то, что вы хотите вместо AliasClassName):

public class AliasClassName
{
    public string MSN { get; set; }
    public Nullable<System.DateTime> PingDateTime { get; set; }
    public string PingValue { get; set; }
    public int i { get; set; }
}

Затем объявите mainDetails как List этого:

var mainDetails = new List<AliasClassName>();

А затем сделайте:

.Select((x, i) => new AliasClassName { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...