我有一个LINQ查询,它的工作原理如下,
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
p.Tenant_Kana_Last.ToString().StartsWith(@"?") ||
p.Tenant_Kana_Last.ToString().StartsWith(@"?") ||
p.Tenant_Kana_Last.ToString().StartsWith(@"?") ||
p.Tenant_Kana_Last.ToString().StartsWith(@"?") ||
p.Tenant_Kana_Last.ToString().StartsWith(@"?"));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情来简化查询?
char[] array = new char[] { '?', '?', '?', '?', '?' };
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
p.Tenant_Kana_Last.ToString().StartsWith(array));
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,因为我必须StartsWith
在LINQ查询上检查更多字符.
因为每个字符串都只是一个字符数组,你可以在它上面做任何linq.只需使用第一个字符,并使用以下命令检查它是否是数组的一部分Contains
:
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Contains(p.Tenant_Kana_Last.ToString()[0]));
Run Code Online (Sandbox Code Playgroud)
或者p.Tenant_Kana_Last.ToString()[0]
你也可以使用p.Tenant_Kana_Last.First()
哪个更容易阅读.
您可以在Any
谓词中使用"开始"数组,如下所示:
var array = new string[] {@"?", @"?", @"?", @"?", @"?"};
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Any(prefix => p.Tenant_Kana_Last.ToString().StartsWith(prefix))
);
Run Code Online (Sandbox Code Playgroud)
如果您只想检查字符,可以使用HimBromBeere的方法.如果数组应包含多个字符的字符串,请尝试以下操作:
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Any(str => p.Tenant_Kana_Last.ToString().StartsWith(str)));
Run Code Online (Sandbox Code Playgroud)