以下是我的错误信息:“IEnumerable”不包含“FirstOrDefaultAsync”的定义,也找不到接受'IEnumerable‘类型的第一个参数的可访问扩展方法'FirstOrDefaultAsync’(您缺少使用指令还是程序集引用?)
我执行了以下操作,错误仍然存在:
下面是我的.cshtml.cs代码,在这里生成错误(第34行):
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Movies.Models;
namespace Movies.Pages.MediaDetails
{
public class DetailsModel : PageModel
{
private readonly Movies.Models.MoviesContext _context;
public DetailsModel(Movies.Models.MoviesContext context)
{
_context = context;
}
MovieDataAccessLayer objmovie = new MovieDataAccessLayer();
public Movies Movies { get; set; }
public async Task<IActionResult> OnGetAsync(byte? id)
{
if (id == null)
{
return NotFound();
}
Movies = await objmovie.MovieByMedia(id).FirstOrDefaultAsync(m => m.MediaTypeID == id);
if (Movies == null)
{
return NotFound();
}
return Page();
}
}
}下面是我的DataAccessLayer,它由上面的代码引用并返回IEnumerable。
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Movies.Models
{
public class MovieDataAccessLayer
{
string connectionString = "Server=servername;Database=DatabaseMovies;Trusted_Connection=True;MultipleActiveResultSets=true";
public IEnumerable<Movies> MovieByMedia(byte? MediaID)
{
List<Movies> lstmovie = new List<Movies>();
using (SqlConnection con = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("usp_MovieByMedia", con);
cmd.Parameters.Add(new SqlParameter("@MediaID", SqlDbType.TinyInt) { Value = MediaID });
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Movies movies = new Movies();
movies.MovieTitle = rdr["MovieTitle"].ToString();
movies.MovieYear = Convert.ToInt32(rdr["MovieYear"]);
lstmovie.Add(movies);
}
con.Close();
}
return lstmovie;
}
}
}如有任何意见,将不胜感激。
发布于 2019-04-19 03:51:57
.FirstOrDefaultAsync()方法是IQueryable接口上的扩展方法。因为您的数据访问方法返回一个IEnumerable,并且不是异步的,所以您应该使用.FirstOrDefault()。
发布于 2019-04-19 03:44:31
尝试将您的IEnumerable转换为某种类型的实际集合,例如:
objmovie.MovieByMedia(id).ToList().FirstOrDefault()https://stackoverflow.com/questions/55755534
复制相似问题