【问题标题】:Convert var to class object in C#在 C# 中将 var 转换为类对象
【发布时间】:2017-07-25 16:12:54
【问题描述】:

我希望从我的 ASP.NET Web API 获得响应,该 API 以对象类型 Product 进行响应。

但是,当我尝试通过 Postman 获得响应时,它总是返回给我

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);
}

【问题讨论】:

    标签: c# asp.net-mvc linq asp.net-web-api get


    【解决方案1】:

    如果返回 IEnumerable,则不能将其转换为 Product。如果你只想要第一个匹配的值,你可以像这样调用 FirstOrDefault:

    var product = db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault();
    

    【讨论】:

    • 非常感谢您的回答,但我只能接受一个答案,@Shadowed 更快
    【解决方案2】:

    Where 返回IQueryable&lt;Product&gt;(这意味着可能不止一个)并且它不能转换为 Product。 如果你只想要一个,那么你可以从结果中取第一个:

    var product = (Product)db.Products.Where(t => t.name.Contains(productname)).FirstOrDefault();
    

    这可以简化为:

    var product = db.Products.FirstOrDefault(t => t.name.Contains(productname));
    

    这将为您提供第一个符合条件的产品,如果没有,则为 null。

    编辑:如 cmets 中所述,此处不需要强制转换,但我将其留在第一个示例中以与原始问题相关。谢谢,尼科。

    【讨论】:

    • 非常感谢,我对 Linq 很陌生,这一直困扰着我,直到我不得不将它们放入 List(这是我知道的唯一方法)
    • 没有理由强制转换为ProductFirstOrDefault() 的结果将是Product 的类型,编译器知道这一点。
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多