C# 使用多个StartsWith子句的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(

我有一个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

因为每个字符串都只是一个字符数组,所以可以对其执行任何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();
        }
    }
}