C# 在C中将变量转换为类对象#
我希望从我的ASP.NET web API获得响应,该API使用对象类型C# 在C中将变量转换为类对象#,c#,asp.net-mvc,linq,asp.net-web-api,get,C#,Asp.net Mvc,Linq,Asp.net Web Api,Get,我希望从我的ASP.NET web API获得响应,该API使用对象类型产品进行响应 然而,当我试图得到邮递员的回复时,它总是给我回信 500内部服务器错误 以下是我的代码,提前感谢您提供的帮助: [ResponseType(typeof(Product))] [Route("webapi/products/{productname}")] public async Task<IHttpActionResult> GetProduct(string productname) {
产品
进行响应
然而,当我试图得到邮递员的回复时,它总是给我回信
500内部服务器错误
以下是我的代码,提前感谢您提供的帮助:
[ResponseType(typeof(Product))]
[Route("webapi/products/{productname}")]
public async Task<IHttpActionResult> GetProduct(string productname)
{
var product = (Product)db.Products.Where(t => t.name.Contains(productname));
//^^^^^^this seems to be the problem^^^^^^^//
if (product == null)
{
return NotFound();
}
return Ok(product);
}
[响应类型(产品类型))]
[路由(“webapi/products/{productname}”)]
公共异步任务GetProduct(字符串产品名)
{
var product=(product)db.Products.Where(t=>t.name.Contains(productname));
//^^^^^^这似乎就是问题所在^^^^^^^//
如果(产品==null)
{
返回NotFound();
}
返回Ok(产品);
}
如果返回IEnumerable,则不能将其转换为Product。如果只需要第一个匹配值,最后可以像这样调用FirstOrDefault:
var product = db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault();
其中返回
IQueryable
(这意味着可能有多个),并且不能转换为产品。
如果只需要一个,则可以从结果中选择第一个:
var product = (Product)db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault();
这可以简化为:
var product = db.Products.FirstOrDefault(t => t.name.Contains(productname));
这将为您提供第一个马赫条件的产品,如果没有,则为空
编辑:正如在评论中提到的,这里不需要cast,但我将它留在第一个示例中,以与原始问题相关。谢谢,Nico。非常感谢,我对Linq是如此陌生,这一直困扰着我,直到我不得不将它们放在列表中(这是我知道的唯一方法)才有理由转换到
Product
,FirstOrDefault()
的结果将是Product
的一种类型,编译器知道这一点。非常感谢您的回答,然而,我只能接受一个答案,@Shadowed的速度更快