无法从'void'转换为'project.Models.tblUserTypes.tblUsersTypeC'

时间:2015-10-26 10:37:08

标签: c# linq lambda

我想用lambda ForEach中的if语句创建新对象,这是什么代码问题?

List<tblUsersTypeC> usertype = new List<tblUsersTypeC>();
usertype.Add(userToInsertList.ForEach(o => 
{
    if ((o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0) 
        new tblUsersTypeC { isPrivite = true, UserName = o.Username, WebsiteUrl = o.Website };
    else
        new tblUsersTypeC { isPrivite = false,  UserName = o.Username, WebsiteUrl = o.Website };
}));

3 个答案:

答案 0 :(得分:2)

List<T>.ForEach旨在迭代列表项并使用其当前状态执行某些操作。实际上,您的问题是另一个示例,它表明,ForEach方法对于foreach运算符来说是不自然的,非显而易见的替代。

要根据当前列表中的项目获取新的项目列表,请使用Select / ToList扩展名:

var usertype = userToInsertList
    .Select(o => new tblUsersTypeC
    {
        isPrivite = (o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0, 
        UserName = o.Username, 
        WebsiteUrl = o.Website 
    })
    .ToList();

答案 1 :(得分:1)

试试这个:

List<tblUsersTypeC> usertype = userToInsertList.Select(o => new tblUsersTypeC() 
    { 
        isPrivite = ((o.Counts.FollowedBy + o.Counts.Follows + o.Counts.Media) == 0), 
        UserName = o.Username, 
        WebsiteUrl = o.Website 
    }).ToList();

答案 2 :(得分:0)

使用

userToInsertList.Select( o=> (condition) ? value1: value2);

userToInsertList.Select( o=> { if(condition) { return value1} else {return value2;}});

List.ForEach不会返回任何内容。