LINQ查询数字匹配

时间:2014-05-07 08:08:56

标签: sql linq

我有一个名为 dbo.Question 的表,其中有两列 Id 标题。我想编写LINQ查询以获取 问题标题以数字 开头的所有问题。

以下是问题搜索结果的示例,其中"标题"以数字开头:

  • 5个有用的Visual Studio快捷方式
  • 关于Hadoop的7件事。
  • 你应该感谢黑客的10个理由

SQL查询如下:

SELECT Title FROM dbo.Question WHERE Title NOT LIKE '[a-z]%'

上述SQL查询的LINQ等价物是什么?

1 个答案:

答案 0 :(得分:3)

var query = from x in dbcontext.Questions
            where SqlFunctions.IsNumeric(EntityFunctions.Left(x.Title, 1)) == 1
            select x;

来源:

http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.isnumeric(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/dd383069(v=vs.110).aspx

考虑到它,考虑到它不使用索引,这不是很有效。你可以这样做......

IEnumerable<string> digits  = Enumerable.Range(0, 10) // 0-9
                                 .Select(i => i.ToString());
                  //Create a query for starts with on each digit.
IEnumerable<IQueryable<Question>> questions = digits
            .Select(i => dbcontext.Questions.Where(q => q.StartsWith(i))
IQueryable<Question> concatedTogether = .Aggregate(Queryable.Concat) //Union all each of them together                      
int count = concatedTogether.Count();

或者只是

int count = Enumerable.Range(0, 9)
                .Select(int.ToString)
                .Select(i => dbcontext.Questions.Where(q => q.StartsWith(i))
                .Aggregate(Queryable.Concat)
                .Count();