C# 如果传递空字符串,则LINQ with包含返回零行

C# 如果传递空字符串,则LINQ with包含返回零行,c#,linq,C#,Linq,我不知道在林克怎么处理这件事 简单地说,我有一个searchKey,我在其中传递用户输入的数据,然后返回行。但如果我没有传递任何搜索键,它就不会给出任何数据。如果searchkey为空,我不想添加包含项:( 您需要使用string.IsNullOrWhiteSpace方法: where (app.IS_DELETED == false && app.CLINICIANID == appReq.id && (string.

我不知道在林克怎么处理这件事 简单地说,我有一个searchKey,我在其中传递用户输入的数据,然后返回行。但如果我没有传递任何搜索键,它就不会给出任何数据。如果searchkey为空,我不想添加包含项:(


您需要使用
string.IsNullOrWhiteSpace
方法:

 where (app.IS_DELETED == false &&
          app.CLINICIANID == appReq.id && 
          (string.IsNullOrWhiteSpace(appReq.searchKey) || 
           app.FNAME.Contains(appReq.searchKey.is Trim()) || ...

我建议您使用方法语法以编程方式轻松构建查询:

var query=Con.ios\u Appointment.Where(app=>!app.IS\u DELETED&&app.CLINICIANID==appReq.id);
var search=appReq.searchKey.Trim();
如果(搜索!=“”)
{
query=query.Where(app=>app.FNAME.Contains(search)|
app.LNAME.Contains(搜索)||
app.ADDRESS.Contains(搜索));
}
var约会=查询
.OrderByDescending(app=>app.DATE)
.选择(应用=>新建)
{
app.ID,
app.FNAME,
app.LNAME,
应用程序日期,
应用经度,
应用纬度,
app.ADDRESS,
app.STATUS,
app.START\u时间
})
.Skip(skiprecard)
.Take(转换为32(记录))
.ToList();

作为旁白,我强烈建议您开始遵循.NET命名约定-这样您的代码看起来会更加惯用。您可以将where condition1&&condition2&&condition3拆分为3个where:where condition1 where condition2 where condition3。这可能会提高您的代码的可读性query@JonSkeet-谢谢你的建议它的客户端要求用大写形式给出对象名:(@ketan:在C代码中,不仅仅是数据库?哇,那太糟糕了。@JonSkeet甚至数据库列名:)这就是我开始写的答案:-!)!使用:
var search=appReq.searchKey?.Trim()会更好吗??"";
这样它也可以处理一个空的searchKey?@asidis:我只想补充一点,如果我知道
appReq.searchKey
可能是合法的空值,我怀疑它不会。
 where (app.IS_DELETED == false &&
          app.CLINICIANID == appReq.id && 
          (string.IsNullOrWhiteSpace(appReq.searchKey) || 
           app.FNAME.Contains(appReq.searchKey.is Trim()) || ...