2010-10-10 64 views
1

我有一个表在具有这样的结构的DB排序:的LINQ/SQL查询的多LIKE条件

Date 
{ 
    ID, 
    Username, 
    Label, 
    DateTime 
} 

我希望能够在LINQ上的用户名进行基本的。载搜索和标签栏,但有一个问题。我想按照LIKE比赛的数量排序。这是什么意思呢:

如果我有Data = {ID=1,Username="Shawn",Label="Whatever",DateTime=1/1/2010}

1)一个实例如果我搜索用户=“芒”和标签=“什么”,结果有2

比赛顺序

2a)的用户= “山楂” 和标签= “猫” 具有1个

2b的匹配顺序)用户= “道” 和标签= “以往” 具有1

3的匹配顺序) User =“Chris”和Label =“Fish”的匹配顺序为0

我希望能够排序匹配顺序,其中2的顺序优于1,然后在每个匹配顺序中我想按日期排序。

我希望能够在linq中做到这一点,但我愿意给直接的SQL代码一个机会。

回答

1

Coould尝试:

from row in db.Dates 
let x = row.UserName.Contains(username) ? 1 : 0 
     + row.Label.Contains(label) ? 1 : 0 
order by x descending 
select new {row.Id, row.UserName, row.Label, 
    Value = x}; 

如果没有,在TSQL同样使用CASE WHEN ... THEN 1 ELSE 0 END

+0

这看起来固体。我总是忘记能够添加linq查询。谢谢。 – Shawn 2010-10-10 05:00:33