C# 使用多个StartsWith子句的LINQ查询?
我有一个LINQ查询,它的工作原理如下所示C# 使用多个StartsWith子句的LINQ查询?,c#,linq,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(
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
因为每个字符串都只是一个字符数组,所以可以对其执行任何linq操作。只需使用第一个字符,并使用以下方法检查它是否是数组的一部分:
除了
p.Tenant\u Kana\u Last.ToString()[0]
之外,您还可以使用p.Tenant\u Kana\u Last.First()
,这更容易阅读。如果您只想检查字符,可以使用HimBromBeere的方法。如果数组应包含多个字符的字符串,请尝试以下操作:
var query = DataContext.TenantDataServerTables.Where(p =>
p.Nursing_Home_Section == homeSection &&
array.Any(str => p.Tenant_Kana_Last.ToString().StartsWith(str)));
你可以替换
p.Tenant_Kana_Last.ToString().StartsWith(array)
与
您可以在谓词中使用“开始”数组,如下所示:
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))
);
如果至少有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();
}
}
}
使用System.Collections.Generic;
使用System.Linq;
名称空间控制台
{
班级计划
{
静态void Main()
{
var searchList=新列表{”ア", "イ", "ウ", "エ", "オ" };
var fullNameList=新列表
{
“阿尔法”,
"ア“好极了”,
“查理”,
"イ三角洲“,
“回声”,
"エ狐步舞“,
“高尔夫”
};
var在fullNameList中查找=from name
来自搜索列表中的firstName
其中name.StartsWith(firstName)
选择名称;
foreach(查找中的字符串str)
控制台写入线(str);
Console.ReadKey();
}
}
}
很抱歉问这个愚蠢的问题,但我不知道这个p.Tenant\u Kana\u Last.ToString()[0])
有什么作用?不是吗[0]
只是数组的一个indwx?并且不包含字符串中的任何地方吗?ToString
创建一个新字符串,它是一个字符的数组,通过使用索引null,您可以得到字符串的第一个字符。您可以在字符串上使用索引运算符[]
来获得该位置的字符。因此[0]
为您提供字符串中的第一个字符。@KyloRen这里的[0]
表示字符串的第一个字符。数组必须包含您要查找的所有字符集。数组=新字符[]{ア', 'イ', 'ウ'}
。最后,包含的
将检查数组中的任何字符是否与Tenant\u Kana\u Last.ToString()的第一个字符匹配 >。该死,我错过了你把它放在查询中,<代码>数组。包含了< /代码>。谢谢你的答案解决了这个问题。很酷的想法,但是你可以考虑一些简短的解释。我似乎犯了一个错误:<代码>不能从“char”转换为“string”<代码>,我不熟悉你的代码,我不知道如何补救这个问题?我没有注意到您的数组是char[]
。此方法需要string[]
(请参见编辑)。此方法允许您使用任意长度的前缀。
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))
);
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));
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();
}
}
}