c# - 如何在 LINQ 中使用字符串进行查询

标签 c# linq

我正在使用 LINQ,我最初是通过表中的主键进行搜索的。但是,现在因为我需要通过许多页面传递我的搜索字段(这使得 URL 非常大)。我想通过从在页面之间传递 Guid 更改为在页面之间传递字符串来解决此问题。这是我之前的:

public ActionResult TechKnowledgebaseList(Guid? createdById)
{
     var model = db.Knowledgebases.AsQueryable();

     if (createdById != null & createdById != Guid.Empty)
     {
           model = model.Where(k => k.CreatedById == createdById);
           ViewBag.CreatedBy = db.Users.Where(c => c.UserId == createdById).First().FullName;
           ViewBag.CreatedById = createdById;
     }
     model = model.OrderBy(k => k.CreatedDate);
     var result = model.ToList();

     return View(result);
}

这是我现在要做的:

public ActionResult TechKnowledgebaseList(string? createdBy)
{
     var model = db.Knowledgebases.AsQueryable();

     if (createdBy != null)
     {
          model = model.Where(c => c.CreatedBy.FullName == createdBy);
          ViewBag.CreatedBy = db.Users.Where(c => c.UserName == createdBy).First().FullName;
          ViewBag.CreatedBy = createdBy;
     }
     model = model.OrderBy(k => k.CreatedDate);
     var result = model.ToList();

     return View(result);
}

如您所见,我现在正在传递一个 sting(它可以是空的)。但是,我收到错误:

Operator '==' cannot be applied to operands of type 'string' and 'string?'

最佳答案

您已经发现在字符串和可空字符串之间没有 == 的运算符重载。

在任何情况下,可为空的字符串都没有意义,因为普通的旧字符串已经可以为空了。将方法的签名更改为

public ActionResult TechKnowledgebaseList(string createdBy)

一切都会按预期工作,您仍然可以根据需要将 null 或空字符串传递给您的方法。

关于c# - 如何在 LINQ 中使用字符串进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502714/

相关文章:

c# - 删除 Azure 表存储中的所有表

c# - 使用 Bootstrap 和 ASP.NET 在面板内左对齐文本但右对齐按钮

c# - 我如何计算 Hot observables?

c# - LINQ - 遍历二维数组的行

asp.net-mvc - Microsoft MVC 中的服务层和存储库设计

c# - Entity Framework Linq 查询 : runs instantly in SSMS and 8-10s in EF LINQ 出现问题

c# - 使用 Linq 选择前 100 条记录

c# - 如何避免向数据表添加重复行

c# - 如何在一个int数组中选择两列

c# - 使用黑白图像进行 Blob 跟踪