我有一个名为 dbo.Question 的表,其中有两列 Id 和标题。我想编写LINQ查询以获取 问题标题以数字 开头的所有问题。
以下是问题搜索结果的示例,其中"标题"以数字开头:
SQL查询如下:
SELECT Title FROM dbo.Question WHERE Title NOT LIKE '[a-z]%'
上述SQL查询的LINQ等价物是什么?
答案 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/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();