【问题标题】:Return multiple results from SQL Server从 SQL Server 返回多个结果
【发布时间】:2023-02-06 20:25:35
【问题描述】:

目前我可以在文本框中输入产品名称并在 SQL Server 数据库中搜索该名称。并且只返回一个唯一的行。这很好用。但是当我搜索例如自行车。我需要退回蓝色自行车和红色自行车。

我目前有:

public List<Product> GetProductByName(string name)
{
    List <Product> productList = new List<Product>();
    using (var context = _dbContextFactory.CreateDbContext())
    {
        productList.Add(context.Product.SingleOrDefault(x => x.ProductName == name));
        return productList;
    }
}

目前我收到一个 System.InvalidOperationException:“序列包含多个元素”。

【问题讨论】:

  • 要修复异常并返回具有相同名称的多个产品,您可以使用 Where 方法而不是 SingleOrDefault。
  • 太棒了。如果我想返回名称与搜索名称接近的产品,我将如何应用搜索。例如搜索汽车返回 motorCAR 因为它包含关键字?

标签: c# return-value blazor-server-side


【解决方案1】:

如果您需要多行,请不要使用 SingleOrDefault。也许相反:


using (var context = _dbContextFactory.CreateDbContext())
{
    return context.Product.Where(x => x.ProductName == name).ToList();
}

【讨论】:

    【解决方案2】:
    public List<Product> GetProductByName(string name)
    {
        List<Product> productList = new List<Product>();
        using (var context = _dbContextFactory.CreateDbContext())
        {
            productList = context.Product.Where(x => x.ProductName == name).ToList();
            return productList;
        }
    }
    

    【讨论】:

    • 请注意,这会不必要地创建 2 个单独的列表
    • 您可以通过直接返回 Where 方法的结果来避免创建两个单独的列表。然而,对于刚刚开始编码之旅的程序员来说,这是最好的学习方式。
    【解决方案3】:

    您可以在 Where 中使用 Contains:

    using (var context = _dbContextFactory.CreateDbContext())
     {
        return context.Product.Where(x => x.ProductName.Contains(name)).ToList();
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多