无法将类型'System.Linq.IQueryable <apps.model.applicant>隐式转换为'Apps.Model.Applicant'。显式转换存在ASP.NET MVC3 </apps.model.applicant>

时间:2013-05-14 03:17:27

标签: asp.net asp.net-mvc-3

 public ViewResult Index(string currentFilter, string searchString, int? page)
    {
        if (Request.HttpMethod == "GET")
        {
            searchString = currentFilter;
        }
        else
        {
            page = 1;
        }
        ViewBag.CurrentFilter = searchString;


        var connString = ConfigurationManager.ConnectionStrings["ApplicantDB"].ConnectionString;
        List<Applicant> instructors = new List<Applicant>();
        using (var conn = new SqlConnection(connString))
        {
            conn.Open();


             var query = new SqlCommand("SELECT TOP 50 APPLICANT_ID, APPLICANT_Lastname, APPLICANT_FirstName, APPLICANT_MiddleName, APPLICANT_Address, APPLICANT_City"+
                    " FROM APPLICANT", conn);

            var reader = query.ExecuteReader();

            int currentPersonID = 0;
            Applicant currentInstructor = null;


            while (reader.Read())
            {
                var personID = Convert.ToInt32(reader["APPLICANT_ID"]);
                if (personID != currentPersonID)
                {
                    currentPersonID = personID;
                    if (currentInstructor != null)
                    {
                        instructors.Add(currentInstructor);
                    }


                    currentInstructor = new Applicant();
                    currentInstructor.APPLICANT_ID = Convert.ToInt32(reader["APPLICANT_ID"].ToString());
                    currentInstructor.APPLICANT_Lastname = reader["APPLICANT_Lastname"].ToString();
                    currentInstructor.APPLICANT_FirstName = reader["APPLICANT_FirstName"].ToString();
                    currentInstructor.APPLICANT_MiddleName = reader["APPLICANT_MiddleName"].ToString();
                    currentInstructor.APPLICANT_Address = reader["APPLICANT_Address"].ToString();
                    currentInstructor.APPLICANT_City = reader["APPLICANT_City"].ToString();


                }
                if (!String.IsNullOrEmpty(searchString))
                {

                    currentInstructor = instructors.AsQueryable().Where(s => s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
                                           || s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper()));
                }
            }
            if (currentInstructor != null)
            {
                instructors.Add(currentInstructor);
            }

            reader.Close();
            conn.Close();
        }

        int pageSize = 10;
        int pageNumber = (page ?? 0);
        return View(instructors.ToPagedList(pageNumber, pageSize));

    }

此行中的错误

 if (!String.IsNullOrEmpty(searchString))
                {

                    currentInstructor = instructors.AsQueryable().Where(s => s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
                                           || s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper()));
                }

这是我第一次遇到这种类型的错误。 。 我在这种错误中浪费了将近2个小时 我希望有人可以在这种情况下帮助我。 。感谢那些愿意帮助的人。 。非常感谢:) KUDOS !!

2 个答案:

答案 0 :(得分:3)

正如错误所示,您正在尝试将单个对象分配给列表。

 currentInstructor = instructors.AsQueryable().Where(s => s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
                                           || s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper()));

如果只有一个结果你需要使用SingleOrDefault(),并且如果有多个记录,请使用FirstOrDefault()从结果集中提取第一个记录。

instructors.AsQueryable().Where(s => s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper())
                                               || s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper())).FirstOrDefault();

答案 1 :(得分:2)

您可能希望列表中的第一个申请人。

currentInstructor = instructors
    .AsQueryable()
    .Where(s => s.APPLICANT_Lastname.ToUpper().Contains(searchString.ToUpper()) || s.APPLICANT_FirstName.ToUpper().Contains(searchString.ToUpper()))
    .FirstOrDefault();