Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将变量转换为类对象#_C#_Asp.net Mvc_Linq_Asp.net Web Api_Get - Fatal编程技术网

C# 在C中将变量转换为类对象#

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) {

我希望从我的ASP.NET web API获得响应,该API使用对象类型
产品
进行响应

然而,当我试图得到邮递员的回复时,它总是给我回信

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的速度更快