使用Entity Framework C#并进行以下查询,我需要其中的内容:
where x.Login_Status == "Submitted"
充满活力。在不同情况下,它可能是“ Submitted”,null或其他东西,而不是在其中编写带有不同查询的多个if语句,而是希望在where子句中有一个谓词。
status = (from x in ctx.table
where x.Login_Status == "Submitted"
orderby x.SUB_DATE descending
select new Model_Table()
{
Id = x.ID,
Name = x.NAME,
Code = x.Code,
DateSubmitted = x.SUB_DATE
}).ToList<Model_Table>();
那可能吗?
解决方案:
在if语句中,当遇到更多参数时使用此语句
where_expression = x => x.Login_Status == "Submitted" || x.Login_Status == null;
这是一个对我有用的完整代码,方括号之间的所有内容都将替换为适合您的代码:
Expression<Func<[Replace with your Entity], bool>> where_submitted = x => x.Login_Status == "Submitted";
// Check if all selected
if (CheckBox_Show_All_Submitted.Checked)
{
where_submitted = x => x.Login_Status == "Submitted" || x.Login_Status == null;
}
status =
ctx.[Replace with your Entity Table]
.Where(where_submitted)
.OrderByDescending(x => x.SUB_DATE)
.Select(x => new Model_Table
{
Id = x.ID,
Name = x.NAME,
Code = x.Code,
DateSubmitted = x.SUB_DATE
}).ToList<Model_Table>();
您需要一个Expression<Func<Entity,bool>>
,而不是一个Predicate<Entity>
。区别在于谓词是编译后的委托,而表达式是将代码作为数据,因此可以转换为SQL。
这是一个例子:
//You can have this expression have different values based on your logic
Expression<Func<Entity,bool>> where_expression = x => x.Login_Status == "Submitted";
var query =
ctx.Table
.Where(where_expression)
.OrderByDescending(x => x.SUB_DATE)
.Select(x => new Model_Table())
{
Id = x.ID,
Name = x.NAME,
Code = x.Code,
DateSubmitted = x.SUB_DATE
}).ToList();
请注意,您需要替换Entity
为真实类的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句