我正在创建一个Web API我知道有很多关于它的问题,但我已经尝试了他们的解决方案,但对我没有用。我要声明一个列表,我将在列表中的几个点使用它。

public HttpResponseMessage GetDetails(string msn, Date,c#,list,linq,asp.net-web-api"/>
	














首页 > 解决方案 > Web API 无法隐式转换类型 'System.Collections.Generic.List<

我正在创建一个Web API我知道有很多关于它的问题,但我已经尝试了他们的解决方案,但对我没有用。我要声明一个列表,我将在列表中的几个点使用它。

public HttpResponseMessage GetDetails(string msn, Date

问题描述

我正在创建一个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<string>'

我怎样才能摆脱这个错误?

任何帮助将不胜感激。


选项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; }
}

然后声明mainDetailsList

var mainDetails = new List<AliasClassName>();

然后做:

.Select((x, i) => new AliasClassName { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })

标签: c#listlinqasp.net-web-api

解决方案


选项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; }
}

然后声明mainDetailsList

var mainDetails = new List<AliasClassName>();

然后做:

.Select((x, i) => new AliasClassName { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })

推荐阅读