从接口的2个值中过滤1个布尔值

时间:2011-06-16 16:47:26

标签: silverlight linq entity-framework wcf-ria-services

假设我有一个IsRegistrationCompleted的属性。

我的过滤器界面中有2个复选框,上面写着:

  1. 完整
  2. 不完全
  3. 如果两者都被选中,则检索完整和不完整的用户。如果仅选中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服务一起使用。

3 个答案:

答案 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()