如何在linq中使用if else

时间:2016-06-24 22:29:10

标签: c# linq

我有一张表,其中我有users.table记录字段lastLoginMonth和LastLoginYear ...我想获取登录时间超过5个月的用户..但在这里我发现了两个案例.. 1)当前年份和lastLoginYear相同 2)当前年份和lastLoginYear不同 处理这个我必须使用不同的条件,但我不知道如何在查询中处理这个......

var year = db.UserManagers.ToList();

foreach (var y in year)
{
    if (y.LastLoginYear == mydate.Year)
    {
        var modell   = (from ummm in db.UserManagers
                        where ((mydate.Month - ummm.LastLoginMonth) >5 
                            && ummm.LoginWarning==false)
                        select ummm).ToList();
                    return View(modell);

     }

     var model = (from ummm in db.UserManagers
                  where (((12 - y.LastLoginMonth) + mydate.Month) >5 
                  && ummm.LoginWarning == false)
                  select ummm).ToList();
     return View(model);
}

我如何以简单的方式组织这个查询...

2 个答案:

答案 0 :(得分:5)

使用三元运算符

 var modell   = (from ummm in db.UserManagers
                 where (((y.LastLoginYear == mydate.Year)
                         ? ((mydate.Month - ummm.LastLoginMonth) >5) 
                         : ((12 - y.LastLoginMonth) + mydate.Month) >5)
                       && ummm.LoginWarning==false)
                 select ummm).ToList();

看看这个例子,了解这是什么意思:

var list = new List<string> { "1", "abc", "5"};
var sel = (from s in list where ((s.Length > 1) ? true : false) select s);

正如您所看到的,我们会将s中存储的每个字符串list应用到下一个过滤器:如果Length超过1,我们会接受它(因为它将是真实的地方),否则,我们不接受它。因此,我们只会使那些Length超过1的字符串。

另请注意,您在return循环中设置了foreach。这意味着foreach将只迭代一次,然后将退出您编写的return。因此,您可能希望此代码与您编写的内容有所不同。

答案 1 :(得分:1)

我想到的第一种方法可能是简单的内联,如果:

var year = db.UserManagers.ToList();

        foreach (var y in year)
        {
             var model   = (from ummm in db.UserManagers
                              where (((y.LastLoginYear == mydate.Year)?(mydate.Month - ummm.LastLoginMonth):((12 - y.LastLoginMonth) + mydate.Month)) >5 && ummm.LoginWarning==false)
                              select ummm).ToList();
                return View(model);

            }
}

我假设您意识到foreach循环内部的返回只会使其执行一次然后返回结果?