IEnumerable的 不包含FirstOrDefaultAsync()的定义

问题描述 投票:0回答:2

这是我的错误消息:'IEnumerable'不包含'FirstOrDefaultAsync'的定义,并且没有可访问的扩展方法'FirstOrDefaultAsync'接受类型'IEnumerable'的第一个参数可以找到(你是否缺少using指令或程序集引用? )

我已完成以下操作并且错误仍然存​​在:

  1. 我没有忘记使用await,根据这个链接:Task does not contain a definition for 'FirstOrDefault'
  2. 我引用System.Core并导入了System.Linq和System.Data.Entity。(System.Linq是模糊的/灰色的,所以它没有被使用),根据这个链接:qazxsw poi

这是我的.cshtml.cs代码,其中生成错误(第34行):

DbSet doesn't contain definition for FirstOrDefault?

这是我的DataAccessLayer,它由上面的代码引用并返回IEnumerable。

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();
        }
    }
}

任何输入将不胜感激。

asp.net tsql async-await ienumerable razor-pages
2个回答
2
投票

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; } } } 方法是IQueryable接口上的扩展方法。由于您的数据访问方法返回IEnumerable而不是异步,因此您应该使用.FirstOrDefaultAsync()

.FirstOrDefault()

https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.queryableextensions.firstordefaultasync?view=entity-framework-6.2.0


0
投票

尝试将您的IEnumerable转换为某种实际的集合,例如:

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.firstordefault?view=netframework-4.8
© www.soinside.com 2019 - 2024. All rights reserved.