【问题标题】:How to convert ObjectResult into List object for stored procedure In MVC?如何将 ObjectResult 转换为 MVC 中存储过程的 List 对象?
【发布时间】:2016-02-03 11:54:17
【问题描述】:

我是 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; }
}

【问题讨论】:

  • 什么是PROC_LogIn_Info?是你的 StoredProcedure 来获取数据吗?
  • PROC_LogIn_Info 是存储过程的名称。
  • 所以您在 EDMX 文件中添加了 SP,您是否为它创建了任何复杂类型以与 SP 连接。为了检查,首先将数据收集到一些var 并检查它返回的内容。
  • 不是任何复杂类型,我只有我的登录模型
  • 那行不通,你必须创建一个复杂的类,然后将你的 SP 连接到那个复杂的类。它会返回那种类型的对象。

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

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

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+

【讨论】:

    【解决方案2】:

    首先在你的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;  
        }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        通过使用复杂类型的 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");
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-10
          • 1970-01-01
          相关资源
          最近更新 更多