首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerable<Movies>不包含FirstOrDefaultAsync()的定义

IEnumerable<Movies>不包含FirstOrDefaultAsync()的定义
EN

Stack Overflow用户
提问于 2019-04-19 01:31:10
回答 2查看 8.3K关注 0票数 1

以下是我的错误信息:“IEnumerable”不包含“FirstOrDefaultAsync”的定义,也找不到接受'IEnumerable‘类型的第一个参数的可访问扩展方法'FirstOrDefaultAsync’(您缺少使用指令还是程序集引用?)

我执行了以下操作,错误仍然存在:

  1. 我没有忘记使用等待,根据这个链接:Task does not contain a definition for 'FirstOrDefault'
  2. 我引用了Sytem.Core并同时导入了System.Linq和System.Data.Entity。(System.Linq是模棱两可的/灰色的,所以它没有被使用),按照这个链接:DbSet doesn't contain definition for FirstOrDefault?

下面是我的.cshtml.cs代码,在这里生成错误(第34行):

代码语言:javascript
复制
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。

代码语言:javascript
复制
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;
        }

    }
}

如有任何意见,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-19 03:51:57

.FirstOrDefaultAsync()方法是IQueryable接口上的扩展方法。因为您的数据访问方法返回一个IEnumerable,并且不是异步的,所以您应该使用.FirstOrDefault()

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

https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.firstordefault?view=netframework-4.8

票数 6
EN

Stack Overflow用户

发布于 2019-04-19 03:44:31

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

代码语言:javascript
复制
objmovie.MovieByMedia(id).ToList().FirstOrDefault()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55755534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档