【问题标题】:How to check search text contains in any field如何检查搜索文本包含在任何字段中
【发布时间】:2021-01-13 18:03:39
【问题描述】:

我有一个名为LogData 的列表数据。它的代码是这样的。

var LogData = LogDataList.Select(data => new LogDataDto
{
    RowCount = RowCount,
    Location = data.LocationName,             
    Sender = data.FullName,
    AccountName = data.AccName,
    Messsage = data.Message
}).ToList();

应用程序为我提供了名为searchText 的前端值。我需要检查搜索文本值是否包含在 LogData 的任何字段中

searchText = "" 我需要获取所有LogData 并且如果searchText 有一些值,我需要检查该值是否包含在任何这些文件中Location,Sender,AccountName and Messsage 并且需要获取这些记录。

所以试了一下,

var result = LogData.Where(x => (searchText == "" || x.Location.Contains(searchText)) || x.Messsage.Contains(searchText)); 

这是正确的方法吗?如何检查搜索文本值是否包含在其他字段中?

【问题讨论】:

  • 是的,这会起作用。是什么阻止您将其也扩展到 Sender 和 AccountName?
  • 可能会稍微快一点 searchText == "" ? LogData : LogData.Where(x => x.Location ...
  • @DavidL 问题是我需要良好的代码实践来做到这一点。您能否为我提供其他领域的代码,以及先生
  • @Charlieface 先生,你能提供我完整的代码吗?这是正确的searchText == "" ? LogData : LogData.Where(x => x.Location.Contains(searchText) || x => x.AccountName.Contains(searchText))
  • 这里是一个例子,在 .net 核心 codewithmukesh.com/blog/jquery-datatable-in-aspnet-core 中为 jquery 数据表做你想做的事情@

标签: c# linq lambda


【解决方案1】:

如果您需要搜索四个字段,您可以继续扩展 OR 条件以包含其他字段。

var result = LogData.Where(x => (
    searchText == "" || 
    x.Location.Contains(searchText) || 
    x.Messsage.Contains(searchText) || 
    x.Sender.Contains(searchText) ||
    x.AccountName.Contains(searchText))
); 

正如 Charlieface 所提到的,您可以通过将 searchText == "" 视为提前退出条件并在不使用 where 子句的情况下返回您的集合来潜在地优化这一点。

var result = searchText == "" ? LogData : LogData.Where(x => (
    x.Location.Contains(searchText) || 
    x.Messsage.Contains(searchText) || 
    x.Sender.Contains(searchText) ||
    x.AccountName.Contains(searchText))
); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2014-11-17
    相关资源
    最近更新 更多