2011-03-17 253 views
2

我正在使用LINQ to SQL和LINQ dynamic where和order by。LINQ to SQL lambda exp。 OrderBy,Case When,Where Where

我想將下面的代碼(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; 

上面的例子不工作! ,任何想法,如果可能的話?任何其他方式來做到這一點?

感謝

回答

7

而不是試圖用一個查詢表達式,我建議你直接使用WhereOrderByThenByDescending方法。例如:

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條款會起作用,但值得一試。如果它沒有工作,請說出發生了什麼,而不是僅僅說「它不工作」。

+0

您好!你是一個幫助我解決數十億問題的史詩傢伙。謝謝! ('OrderBy'子句工作得很好..) – 2013-09-16 12:30:48