如何过滤列的第一个字符在EF和SQL Server范围内的行?

时间:2017-04-07 11:59:08

标签: c# sql-server entity-framework linq

我有下表:

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]      UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,    
    [English]       NVARCHAR (250)   NOT NULL
)

有没有办法使用Entity Framework我可以选择[English]列的第一个字符小于“k”的所有行。例如,它是“a”,“b”,“c”......“j”等

这样的事情:

query = query.Where(w =>   w.English.StartsWith("k");

但是对于字符范围而不仅仅是“k”

1 个答案:

答案 0 :(得分:1)

您可以在从db获取记录后对其进行过滤。为此,您可以执行以下操作:

var result = query.ToList();

然后按如下方式过滤:

result = result.Where(w => Convert.ToChar(w.English.Substring(0,1).ToLower()) < 'k');

SQL Server中,以下查询可行:

SELECT * FROM table WHERE Substring(English, 1, 1) < 'k'

对于字符范围,您的查询将是:

SELECT * FROM table WHERE Substring(English, 1, 1) BETWEEB 'a' And 'j'

以上内容将获取记录,条件是英文专栏的第一个字符应介于aj之间。请注意,在这种情况下,aj将具有包容性。

对于特定字符,您的查询将是:

 SELECT * FROM table WHERE Substring(English, 1, 1) IN ('a', 'd', 'f')

上述内容将返回英文专栏以adf开头的记录。否定你可以使用NOT IN ('a', 'd', 'f')

  

我建议你用上面的查询写一个程序然后   使用实体框架来称呼它。这种方法会快得多。