假设我有一个IsRegistrationCompleted
的属性。
我的过滤器界面中有2个复选框,上面写着:
如果两者都被选中,则检索完整和不完整的用户。如果仅选中Complete
,则仅检索已完成的用户。如果没有选中,则不会检索任何内容。
如何将此逻辑放在linq中?
我将我的复选框绑定如下:
public bool IsCompleted { get; set; }
public bool IsInCompleted { get; set; }
我的方法是:
private void GetUsers()
{
//TODO: Apply filters here.
var query = _context.GetUsers(); //Returns IQueryable<User>
_context.Load(query, LoadBehavior.MergeIntoCurrent, LoadApplicantsCompleted, null);
}
将Silverlight与WCF Ria服务一起使用。
答案 0 :(得分:3)
这样的事情会起作用。如果您在单个Where语句中具有以下所有逻辑,我认为很难阅读
if(IsCompleted && IsInCompleted)
{
query = query;
}
else if(IsCompleted)
{
query = query.Where(u => u.IsRegistrationCompleted);
}
else if(IsInCompleted)
{
query = query.Where(u => !u.IsRegistrationCompleted);
}
else
{
query = query.Where(u => false);
}
答案 1 :(得分:1)
在一个查询中,它将如下所示:
Users.Where(r => (IsCompleted && r.IsRegistrationCompleted) || (IsInCompleted && !r.IsRegistrationCompleted))
答案 2 :(得分:0)
我还没有测试过,但这样的事情可能有用:
(from user in users where IsCompleted && user.IsCompleted select user).Union(from user in users where IsInCompleted && !user.IsCompleted select user).Distinct()