LINQ查询有多个StartsWith子句?

Kyl*_*Ren 2 c# linq

我有一个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查询上检查更多字符.

Him*_*ere 6

因为每个字符串都只是一个字符数组,你可以在它上面做任何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()哪个更容易阅读.


das*_*ght 6

您可以在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)


Luk*_*fer 5

如果您只想检查字符,可以使用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)