在动作方法中,我得到以下查询:
var list = listWRUD.
Join(db.UsersDetails,
o => o.UserDetailsId, od => od.identtyUserId,
(o, od) => new
{
fname = od.FirstName,
lname = od.LastName,
UserDetailsId = o.UserDetailsId,
FocusStart = o.FocusStart,
FocusEnd = o.FocusEnd
}).ToList()
它基本上给了我一个包含大量重复名称的列表。
我想要实现(并且不知道如何)是RolesUsersViewModel
类型的另一个列表:
public class RolesUsersViewModel
{
public RolesUsersViewModel(string FirstName, string LastName, TimeSpan totalex)
{
fname = FirstName;
lname = LastName;
total = totalex;
}
public string fname { get; set; }
public string lname { get; set; }
public TimeSpan total{ get; set; }
}
我的想法是,如果查询给我一个三个结果的列表,其中两个是同名的结果,最后得到一个包含两个条目的View模型列表,这将有累积时间。
有人能以某种方式帮助吗?这可以用lambda来完成吗?
答案 0 :(得分:3)
加入两个集合后,您可以按名字和姓氏对结果进行分组,并计算时间间隔的总和:
from x in list
group x by new { x.fname, x.lname } into g
select new RolesUsersViewModel {
fname = g.Key.fname,
lname = g.Key.lname,
total = g.Sum(x => x.FocusEnd - x.FocusStart)
}
答案 1 :(得分:0)
@Sergey给出的答案是正确的。
此答案适用于问题的编辑版本
您获得的错误是因为当您有参数化构造函数时缺少默认构造函数。
您可以通过在ViewModel
中包含无参数构造函数来避免它 public RolesUsersViewModel()
{
}
或者通过将查询更改为
from x in list
group x by new { x.fname, x.lname } into g
select new RolesUsersViewModel (g.Key.fname, g.Key.lname, g.Sum(x => x.FocusEnd - x.FocusStart));