我正在使用LINQ to SQL和LINQ dynamic where and order by。
我想将下面的代码(ASP)转换为C#.net。
function getTestimonialList(statusCd)
sWhere = ""
if statusCd <> "" then
sWhere = " where status='" & statusCd & "'"
end if
sqlStr="select * from testimonial" & sWhere & " order by case when status = 'P' then 1 when status = 'A' then 2 else 3 end, dateadded desc"
set rs=getResult(sqlStr)
set getTestimonialList=rs
end function
这是我的问题:
var TestimonialList = from p in MainModelDB.Testimonials
where String.IsNullOrEmpty(statusCd)?"1=1":p.status== statusCd
orderby p.status == 'P' ? 1 : (p.status == 'A' ? 2 : 3)
orderby p.DateAdded descending
select p;
上面的例子不起作用! ,任何想法,如果它可能吗?还有其他办法吗?
由于
答案 0 :(得分:8)
我建议您直接使用Where
,OrderBy
和ThenByDescending
方法,而不是尝试使用查询表达式。例如:
IQueryable<Testimonial> testimonials = MainModelDB.Testimonials;
if (!string.IsNullOrEmpty(statusCd))
{
testimonials = testimonials.Where(t => t.status == statusCd);
}
var ordered = testimonials.OrderBy(t => t.status == 'P' ?
1 : (t.status == 'A' ? 2 : 3))
.ThenByDescending(t => t.DateAdded);
请注意使用ThenByDescending
代替OrderByDescending
- 您的原始查询使用了两个“主要”排序,几乎不是您想要的。
我不完全确定OrderBy
子句会起作用,但值得一试。如果没有工作,请说出会发生什么,而不只是说“它不起作用”。