c# - 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; }
}
然后声明mainDetails
为List
:
var mainDetails = new List<AliasClassName>();
然后做:
.Select((x, i) => new AliasClassName { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
解决方案
选项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 })
推荐阅读
- oracle - 您知道为什么当我尝试连接到 Oracle 服务器时会出现以下错误“状态:失败 - [LDAP:错误代码 32 - 无此类对象]”吗?
- ios - GroupHeaderTemplate 在 Xamarin.Forms iOS 项目中有额外的高度
- sqlite - SQLite3 将两个整数的结果相除
- sql - 数据模型指导,数据库选择用于更改过滤条件的聚合
- spring - 存在可选的 int 参数“movieId”但不能转换为空值
- postgresql - postgresql-12 分区表性能问题
- c - AUTOSAR 的内存映射
- linux - Shell script to find increase in occurance count between two files
- node.js - 磁盘容量低,无法产生更多消息
- spring-boot - 是否可以让 application.properties 依赖于多个配置文件?
我正在创建一个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; }
}
然后声明mainDetails
为List
:
var mainDetails = new List<AliasClassName>();
然后做:
.Select((x, i) => new AliasClassName { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
解决方案
选项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 })
推荐阅读
- oracle - 您知道为什么当我尝试连接到 Oracle 服务器时会出现以下错误“状态:失败 - [LDAP:错误代码 32 - 无此类对象]”吗?
- ios - GroupHeaderTemplate 在 Xamarin.Forms iOS 项目中有额外的高度
- sqlite - SQLite3 将两个整数的结果相除
- sql - 数据模型指导,数据库选择用于更改过滤条件的聚合
- spring - 存在可选的 int 参数“movieId”但不能转换为空值
- postgresql - postgresql-12 分区表性能问题
- c - AUTOSAR 的内存映射
- linux - Shell script to find increase in occurance count between two files
- node.js - 磁盘容量低,无法产生更多消息
- spring-boot - 是否可以让 application.properties 依赖于多个配置文件?