gpt4 book ai didi

c# - LINQ to SQL lambda 表达式。 OrderBy、Case When、Dynamic Where

转载 作者:行者123 更新时间:2023-11-30 19:48:33 25 4
gpt4 key购买 nike

我正在使用 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;

上面的例子是行不通的! ,知道是否可能?还有其他方法吗?

谢谢

最佳答案

与其尝试使用查询表达式,我建议您直接使用 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 子句是否有效,但值得一试。如果它不起作用,请说出发生了什么,而不仅仅是说“它不起作用”。

关于c# - LINQ to SQL lambda 表达式。 OrderBy、Case When、Dynamic Where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5336099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com