LINQ查询有多个StartsWith子句?

时间:2017-01-09 10:31:34

标签: 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(@"オ"));
        }

有没有办法做这样的事情来简化查询?

char[] array = new char[] { 'ア', 'イ', 'ウ', 'エ', 'オ' };

var query = DataContext.TenantDataServerTables.Where(p => 
                 p.Nursing_Home_Section == homeSection &&
                 p.Tenant_Kana_Last.ToString().StartsWith(array));

这只是一个例子,因为我必须在LINQ查询上检查StartsWith还有更多字符。

6 个答案:

答案 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();
        }
    }
}