我有一张表,其中我有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);
}
我如何以简单的方式组织这个查询...
答案 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循环内部的返回只会使其执行一次然后返回结果?