【发布时间】:2016-11-22 11:38:00
【问题描述】:
我有一个 LINQ 查询来返回查找数据。传入一个 bool 参数,称为 active。
我想要么只返回 active = true 的行 或者 无论活动状态如何,都返回所有行 在 LINQ 的 where 子句中是否有一种优雅的方法可以做到这一点?
return await (from p in db.PackSizeTypes.AsNoTracking()
where p.Active == true
orderby p.ID
select new PackSizeTypeObject
{
ID = p.ID,
Name = p.Name.Trim(),
LastEditedDate = p.LastEditedDate,
LastEditedBy = p.LastEditedBy,
Active = p.Active
}).ToListAsync();
有没有办法在 where 子句中使用三元运算符来提供这个开关?
【问题讨论】:
-
如果你想要真正的或全部,那不就是全部吗?
-
是的,但在处理表单上,它必须只显示 active = true 的位置。在配置表单上,它必须显示 active = 无关紧要:-)
-
我想知道您是如何决定是只获得活动条目还是所有条目?有第二个参数吗?
-
有办法,但优雅的LINQ并不意味着优雅的SQL。实际上优雅的 LINQ 解决方案会产生糟糕的低效 SQL 查询。如果您问我,请忘记优雅并使用有条件的
Where。 -
低效的 SQL 可以解决这个问题,因为查找表中的条目少于 20 个,并且不太可能超过该行数。
标签: c# entity-framework linq