C# 如何在linq中使用if-else

C# 如何在linq中使用if-else,c#,linq,C#,Linq,我有一个表,其中有用户记录。表中有字段lastLoginMonth和LastLoginYear…我想获取登录时间超过5个月的用户。但在这里我发现了两个案例。。 1) 本年度和上次登录日期相同 2) 本年度和上次登录日期不同 要处理这个问题,我必须使用不同的条件,但我不知道如何在查询中处理这个问题 var year = db.UserManagers.ToList(); foreach (var y in year) { if (y.LastLoginYear == mydate.Yea

我有一个表,其中有用户记录。表中有字段lastLoginMonth和LastLoginYear…我想获取登录时间超过5个月的用户。但在这里我发现了两个案例。。 1) 本年度和上次登录日期相同 2) 本年度和上次登录日期不同 要处理这个问题,我必须使用不同的条件,但我不知道如何在查询中处理这个问题

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);
}

如何以简单的方式组织此查询…

使用三元运算符:

 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);
var list=新列表{“1”、“abc”、“5”};
var sel=(从列表中的s开始,其中((s.Length>1)?true:false)选择s;
如您所见,我们获取存储在
列表中的每个字符串
s
,并将下一个过滤器应用于该字符串:如果
长度大于1,我们将获取该字符串(如果为true),否则不获取该字符串。因此,我们只取长度大于1的字符串


还要注意,在
foreach
循环中执行
return
。这意味着
foreach
将只迭代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循环中的返回只会使它执行一次,然后返回结果?

您在这里做什么?如果您第一次返回foreach循环,为什么会有foreach?我不想发布答案,但您不需要三元函数。您可以使用
EntityFunctions.diffurs来完成此操作(i.FromDate,i.ToDate)>5
很可能不太重要(除非你有数十亿用户),但大多数(实际上截至本文撰写时的所有答案)都不是。将信息(月份和年份)存储在单独的列中是非常糟糕的做法。如果可以,你应该合并它们,那么查询将更容易编写(适用于所有情况的单个where)。不,实际上我想返回一个包含这两个数据的东西(model+model)但是我不能用任何逻辑来解决这个问题,所以我用for循环,返回了两个东西,让大家可以理解,我到底想做什么…不,实际上我想返回一个东西,包含两个数据(model+model)但是我不能用任何逻辑来解决这个问题所以这就是为什么我返回两件事让你们理解我想做的事…谢谢你们我在你们的帮助下解决了这个问题…你们向我解释得很好…再次感谢你们