我有一个函数,该函数接收两个日期并返回两个日期之间的工作日。
int WeekDayBetweenDates(DateTime firstDate, DateTime secondDate)
我想在Linq上调用此函数,如果我到达某个国家/地区,则需要检查日期,如果他们的注册日期是从今天开始的5个工作日。
例如,我有一个用户列表。
List<users> userList = getUsers();
public class user
{
string Name;
string Country;
DateTime EnrollmentDate;
}
因此,我创建了一个函数,用于提取距今天不超过5个工作日且来自加拿大的用户
List<users> extract unQualifiedUsers(List<user> uList)
{
List<user> uqUserList = new List<list>();
uqUserList = uList.Where(u=> u.Country == "Canada" && WeekDayBetweenDates(u.EnrollmentDate, DateTime.Now) > 5).ToList();
uList = uList.Except(uqUserList ).toList();
return uqUserList;
}
但是,这样做之后,我遇到了错误。我是否应该遍历加拿大的每个用户并获得他们?还是有办法在linQ中调用我的自定义方法?
答案 0 :(得分:1)
首先,此代码不正确:
List<users> userList = getUsers();
public class user
{
string Name;
string Country;
DateTime EnrollmentDate;
}
List<users>
应该是List<user>
。紧接着,Name
,Country
和EnrollmentDate
应标记为public
以便被访问。
extract unQualifiedUsers
方法的返回类型也是如此(该方法无效,因为方法名不能包含任何空格。
List<user> uqUserList = new List<list>();
也不编译,因为您试图创建列表列表(?)。 List<user> uqUserList = new List<user>();
将起作用。
行uList = uList.Except(uqUserList).toList();
是多余的,因为.Where
已经进行了过滤(并且代码不正确。ToList
的首字母为T。
最后,您的过滤逻辑不正确。您希望所有已注册少于5天的用户。
解决所有这些问题,将导致以下代码:
List<user> extractunQualifiedUsers(List<user> uList)
{
return uList.Where(u => u.Country == "Canada" && WeekDayBetweenDates(u.EnrollmentDate, DateTime.Now) < 5).ToList();
}
public class user
{
public string Name;
public string Country;
public DateTime EnrollmentDate;
}
建议:首先获取您的代码!未编译或不完整/不可测试的代码几乎总是在SO上被否定地接收。 This Help Center article是有关如何编写好的问题的很好的资源。
答案 1 :(得分:0)
因此,您有一个国家名称和一系列用户。
您希望居住在该国家/地区并具有从现在到现在的5天之间的EnrollmentDate的所有用户。
DateTime now = DateTime.UtcNow;
string country = ...
IEnumerable<User> users = ...
var result = users.Where(user => user.Country == country
&& WeekdayBetweenDates(now, user.EnrollmentDate) < 5);
简单的漫画卓悦!
答案 2 :(得分:-5)
uqUserList = uList.where(u=> { return u.Country == "Canada" && WeekDayBetweenDates(u.EnrollmentDate, DateTime.Now) });
您只需要使用大括号来包装代码即可。 通过使用此代码,您可以编写返回正确变量的任何代码。
此linq中使用where子句的示例,它必须返回布尔类型变量。