C# 如何筛选列的第一个字符在EF和SQL Server范围内的行?
我有下表:C# 如何筛选列的第一个字符在EF和SQL Server范围内的行?,c#,sql-server,entity-framework,linq,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 =
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”您可以在从数据库中获取记录后对其进行过滤。为此,您可以执行以下操作:
var result = query.ToList();
然后按如下方式对其进行过滤:
result = result.Where(w => Convert.ToChar(w.English.Substring(0,1).ToLower()) < 'k');
对于字符范围,您的查询将是:
SELECT * FROM table WHERE Substring(English, 1, 1) BETWEEB 'a' And 'j'
SELECT * FROM table WHERE Substring(English, 1, 1) IN ('a', 'd', 'f')
以上内容将获取记录,条件是英文列的第一个字符应介于a
和j
之间。请注意,在这种情况下,a
和j
将包括在内
仅对于特定字符,您的查询将是:
SELECT * FROM table WHERE Substring(English, 1, 1) BETWEEB 'a' And 'j'
SELECT * FROM table WHERE Substring(English, 1, 1) IN ('a', 'd', 'f')
上面将返回英文列以a
、d
、f
开头的记录。要进行否定,可以在('a','d','f')中使用NOT
我建议您使用上述查询编写一个过程,然后
使用实体框架调用它。这种方法会快得多
试试这个:query=query.Where(w=>w.English.Substring(0,1)<“k”)代码>@ZoharPeled-见下面的评论。这将不起作用:-(您可以尝试query=query.Where(w=>w.English[0]<'k');
。但是,我不确定它将如何处理大小写或非字母字符。我得到的消息是,<无法应用于'string'和'string'类型的操作数