将PrincipalSearchResult对象传递到ViewModel中的列表

时间:2019-06-25 15:54:27

标签: c# asp.net-mvc asp.net-core

我的目标是让用户根据某些条件(名字,姓氏,ID)搜索现有用户的广告,并显示匹配的项目。

我正在使用PrincipalSearcher来完成此操作:

控制器:

public ViewResult Index(string fname, string lname, int id)
    {
        UserPrincipal user = new UserPrincipal(pcontext);

        user.GivenName = fname;
        user.Surname = lname;
        user.EmployeeId = id.ToString();

        PrincipalSearcher ps = new PrincipalSearcher();
        ps.QueryFilter = user;
        PrincipalSearchResult<Principal> results = ps.FindAll();

        List<Principal> userResults = new List<Principal>();
        foreach (Principal item in results)
        {
            userResults.Add(item);
        }

        var viewModel = new UserSearchViewModel
        {
            Users = userResults.ToList()
        };

        return View(viewModel);
    }

最后,我将结果传递给我创建的视图模型,并将其绑定到列表模型。

ViewModel:

    public class UserSearchViewModel
{
    public Request Request { get; set; }

    public List<UserSearch> Users { get; set; }

    public int id { get; set; }

    public string fname { get; set; }

    public string lname { get; set; }
}

我收到的当前错误消息如下: 无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.List'

我尝试将userResults更改为List类型,但错误仍然存​​在。我尝试只返回结果,但后来又想不通如何提交用户结果,然后在视图中显示结果。

对于实现我的目标的任何帮助或指导,将不胜感激。

编辑:模型

    public class UserSearch
{
    public int employeeId { get; set; }

    public string firstname { get; set; }

    public string lastname { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您需要将用户结果投影到您的UserSearch模型中:

    var viewModel = new UserSearchViewModel
    {
        Users = ps.FindAll().Cast<UserPrincipal>() // You could use also .OfType<UserPrincipal> 
                            .Select(p=>new UserSearch{employeeid=p.EmployeeId,
                                                      firstname=p.GivenName, 
                                                      lastname=p.SurName})
                            .ToList()
    };

在此post的帮助下。 Principal没有名字和姓氏,这就是我进行强制转换的原因