【发布时间】:2016-05-06 17:30:54
【问题描述】:
使用实体框架 C# 并有这个查询,我需要它说的部分:
where x.Login_Status == "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>();
【问题讨论】:
-
您可以使用按位枚举,并使用Enum.HasFlag(实际上,这并没有考虑到 null 的情况)。
-
查看我在类似问题中的回答:stackoverflow.com/a/34098534/1677829
-
你需要一个表达式,而不是一个谓词。
标签: c# mysql entity-framework visual-studio predicate