我有一个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(@"オ"));
}
有没有办法做这样的事情来简化查询?
char[] array = new char[] { 'ア', 'イ', 'ウ', 'エ', 'オ' };
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
p.Tenant_Kana_Last.ToString().StartsWith(array));
这只是一个例子,因为我必须在LINQ查询上检查StartsWith
还有更多字符。
答案 0 :(得分:6)
因为每个字符串都只是一个字符数组,你可以在它上面做任何linq。只需使用第一个字符,然后使用Contains
检查它是否属于数组:
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Contains(p.Tenant_Kana_Last.ToString()[0]));
与p.Tenant_Kana_Last.ToString()[0]
相反,您也可以使用p.Tenant_Kana_Last.First()
,这样更容易阅读。
答案 1 :(得分: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))
);
答案 2 :(得分:5)
如果您只想检查字符,可以使用HimBromBeere的方法。如果数组应包含多个字符的字符串,请尝试以下操作:
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Any(str => p.Tenant_Kana_Last.ToString().StartsWith(str)));
答案 3 :(得分:3)
您可以替换
p.Tenant_Kana_Last.ToString().StartsWith(array)
与
array.Any( c => p.Tenant_Kana_Last.ToString().StartsWith(c))
答案 4 :(得分:3)
char[] array = new char[] { 'ア', 'イ', 'ウ', 'エ', 'オ' };
var query = DataContext.TenantDataServerTables
.Where(p => p.Nursing_Home_Section == homeSection
&& array
.Any(c=>p.Tenant_Kana_Last.ToString().StartsWith(c));
如果至少1与真理匹配,则返回true,将像链式或运算符一样工作
答案 5 :(得分:1)
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp
{
class Program
{
static void Main()
{
var searchList = new List<string> { "ア", "イ", "ウ", "エ", "オ" };
var fullNameList = new List<string>
{
"Alpha",
"アBravo",
"Charlie",
"イDelta",
"Echo",
"エFoxtrot",
"Golf"
};
var finds = from name in fullNameList
from firstName in searchList
where name.StartsWith(firstName)
select name;
foreach (string str in finds)
Console.WriteLine(str);
Console.ReadKey();
}
}
}