简体   繁体   English

SQL按Linq中的<字符串排序到实体框架

[英]Sql order by < string in linq to entity framework

how to perform this query in Linq (lambda) to Entity Framework. 如何在Linq(lambda)中执行此查询到实体框架。

select * from table where name like '%someString%' order by name <'someString', name

Let's say I have this data on server: 假设我在服务器上有以下数据:

aba
baa

querying by '%ba%' 通过“%ba%”查询

if I order by name the result will be :
aba - baa

if I order < name the result will be :
baa - aba (which is desired)

If I understood you correctly, you're using Entity Framework to query a MySQL database table. 如果我对您的理解正确,那么您正在使用Entity Framework查询MySQL数据库表。

One solution would be to create an anonymous object containing your entity and its sort score. 一种解决方案是创建一个包含您的实体及其排序分数的匿名对象。 Replace Table with your entity of course 当然用您的实体替换Table

var matches = DataContext.Table
               .Where(x=>x.Name.Contains(searchToken))
               .Select(x=> new {Table = x, 
                                Score = (x.Name.StartsWith(searchToken))})
               .OrderByDescending(x=>x.Score)
               .ThenBy(x=>x.Emp.Name);

Here's a .NET Fiddle demonstrating . 这是一个.NET小提琴演示

aString.CompareTo(anOtherString) < 0 is translated as aString < anOtherString in SQL (at least by the Sql Server provider, maybe also in MySql, hope you're lucky). 在SQL中, aString.CompareTo(anOtherString) < 0转换为aString < anOtherString (至少由Sql Server提供程序提供,也许也由MySql提供,希望您很幸运)。 So in your case it would be 所以在你的情况下

from t in context.Table
where t.name.Contains(someString)
orderby (t.name.CompareTo(someString) < 0), t.name
select t

(courtesy p.campbell bumping this back to the front page). (由p.campbell提供)回到首页。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM