2017-04-07 18 views
3

我有如下表:如何过滤列中第一个字符在EF和SQL Server范围内的行?

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

是否有使用实体框架,我可以挑选那些行,其中的[英文]列的第一个字符是小于“K”的方式。例如它可以是“A”,“B”,“C” ......“J”等

事情是这样的:

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

但字符的范围,不只是“ k“

+1

试试这个:'query = query.Where(w => w.English.Substring(0,1)<“k”));' –

+0

@ZoharPeled - 请参阅下面的注释。这不会工作:-( – Alan2

+0

你可以尝试'query = query.Where(w => w.English [0] <'k');'。但是,我不知道它将如何处理大小写或非大写字母,字母字符 –

回答

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')

我建议你写一个程序与上面的查询,然后使用实体框架 调用它。这种方法会更快。

+0

我收到<无法应用于字符串'和'字符串'操作数的消息 – Alan2

+0

请参阅更新。 –

相关问题