如何将对象结果转换为 List 对象以用于 MVC 中的存储过程

本文关键字:对象 MVC 用于 存储过程 结果 转换 List | 更新日期: 2023-09-27 18:32:58

我是MVC的新手,正在进行登录页面验证,并且在控制器中遇到问题,用于通过带有.edmx文件的存储过程获取登录用户数据。

PROC_LogIn_Info是存储过程的名称。

我收到一个错误:

无法将方法组"ToList"转换为非委托类型"System.Collections.Generic.List"。是否打算调用该方法?

法典:

[HttpPost]
public ActionResult Login(tblUserMaintenance user)
{
        if (ModelState.IsValid)
        {
            using (dbPA_MVCEntities objCon = new dbPA_MVCEntities())
            {                   
                List<Login> LoginUser =  objCon.PROC_LogIn_Info("jhony", "a").ToList();
                // showing Error here
            }
        }
        else
            ModelState.AddModelError("", "The user name or password provided is incorrect.");

        return RedirectToAction("LoginIndex", "Login");
}

我的模型是Login

public class Login
{
    [Required]
    [DisplayName("User ID")]
    public string vUserID { get; set; }
    [DisplayName("User Name")]
    public string vUserName { get; set; }
    [DisplayName("User Email Id")]
    public string vUserEmail { get; set; }
    [DisplayName("Phone Number")]
    public string vPhoneNumber { get; set; }
    public string vRoleId { get; set; }
    public string IsActive { get; set; }
    public string chUserType { get; set; }
    [Required]
    [DisplayName("Password")]
    public string vPassword { get; set; }
    public List<Login> LoginUsersData { get; set; }
}

如何将对象结果转换为 List 对象以用于 MVC 中的存储过程

首先在 cs 文件中引用 System.Linq,然后使用 System.Linq 中的 ToList:

using System;
using System.Collections.Generic;
using System.Linq;

public IList<ActivityEvent> GetActivityEvent(string sESSION_ID)
    {
        var result = this.unitOfWork.Context.GetActivityEvent(sESSION_ID);
        if (result != null)
        {
            return result.ToList();
        }
        return null;  
    }

我搜索了很多文章,但没有看到正确的答案。因此,我创建了一个示例代码段。希望这有帮助。

static void Main(string[] args)
{
List<User> myUserList = GetUserList();
}
public static List<User> GetUserList()
        {
            var dbContext = new UserEntities();
            var results = dbContext.GetUserDetails();
            return results.Select(x => new User
            {
                User_id = x.User_id,
                First_Name = x.First_Name,
                Last_Name = x.Last_NAME
            }).ToList();
        }

在上面的代码段中,dbContext 是 edmx 上下文引用。UserEntities() 是我的 edmx 实例的名称。GetUserDetails() 是存储过程的名称,User 是模型类。 希望这对:)有所帮助

引用:https://forums.asp.net/t/2072373.aspx?Can+not+implicitly+convert+List+objectresult+T+to+collection+GenericList+T+

存储过程的结果是唯一的自动生成类型。进行转换的最简单方法是

List<Login> LoginUser = from result in objCon.PROC_LogIn_Info("jhony", "a").ToList()
                        select new Login
                        {
                            // Set each property in turn
                            vUserID = result.UserId;
                            ...
                        };

通过使用复杂类型的PROC_LogIn_Info_Result

 [HttpPost]
    public ActionResult Login(Login user)
    {
        if (ModelState.IsValid)
        {
            using (dbPA_MVCEntities objCon = new dbPA_MVCEntities())
            {                    
                List<PROC_LogIn_Info_Result> LoginUser = objCon.PROC_LogIn_Info(user.vUserid, user.vPassword).ToList<PROC_LogIn_Info_Result>();
                if (LoginUser.Count > 0)
                {
                    Session["UserID"] = LoginUser[0].vUserid;
                    Session["UserName"] = LoginUser[0].vUserName;
                    Session["UserRole"] = LoginUser[0].vRole;
                    Session["UserType"] = LoginUser[0].vUserType;
                    Session["UserEmailId"] = LoginUser[0].vUserEmail;
                }
                else
                    ModelState.AddModelError("", "The user name or password provided is incorrect.");                       
            }
        }
        else
            ModelState.AddModelError("", "The user name or password provided is incorrect.");

        return RedirectToAction("LoginIndex", "Login");
    }