【问题标题】:Why does this IQueryable issue give me an error?为什么这个 IQueryable 问题会给我一个错误?
【发布时间】:2021-08-10 08:16:51
【问题描述】:

我无法弄清楚为什么下面的代码不起作用。它导致构建错误:

IQueryable<InventoryTbl>' does not contain a definition for 'FirstOrDefault' and the best extension method overload 'Queryable.FirstOrDefault<AdminModel>(IQueryable<Admin>)

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using RuciyanaSweets.Models;

[HttpGet]
public ActionResult AdminAddorEdit(int id = 0)
{
    if (id==0)
        return View(new Model());
    else
    {
        using (Entities db = new Entities ())
        {
            return View(db.TableName.Where(x => x.FieldID == id).FirstOrDefault< Model >());
        }
    }
}

【问题讨论】:

  • Rayman Bacchus,为了帮助你,你需要添加一条错误信息文本
  • @Rayman Bacchus:您能在帖子中添加TableName 的定义吗?应该是public virtual DbSet&lt;Model&gt; TableName { get; set; }

标签: c# asp.net asp.net-mvc iqueryable


【解决方案1】:
  • 定义TSource FirstOrDefault&lt;TSource&gt;(this IQueryable&lt;TSource&gt; source)System.Linq 命名空间的一部分。检查您的项目是否引用了System.Core,并且您有using System.Linq;using System.Data.Entity;
  • 确保您安装了EntityFramework 软件包。

Queryable.FirstOrDefault Method

【讨论】:

  • 我的控制器中已经有using System.Linqusing System.Data.Entity。事实上,它们在控制器和模型中。
  • @Rayman Bacchus:由于某种原因,编译器找不到FirstOrDefault() 定义。这可能是因为:1) 错误的程序集引用; 2) LINQ 表达式中的类型不匹配。进行以下操作:将插入符号放在 Where 扩展方法上,然后按 F12。查看定义Where() 的文件的第一行(同一程序集中定义的FirstOrDefault(),以了解哪个程序集正在实现Where 扩展方法。应该是System.Core。检查是不是这样?
  • 想通了。我显然使用了不正确的模型。我无法解释为什么。我根据数据库创建了自己的模型,但它没有工作,但是当我使用自动创建的模型时它工作了。感谢这个想法 - 它为我指明了使用错误模型的方向。我只是想不通为什么一个模型有效而另一个无效,它们基本上是复制品。但这将是另一天的调查。
  • @Rayman Bacchus:这就是为什么在这种情况下建议创建一个minimal reproducible example。很高兴您解决了问题。
猜你喜欢
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2017-03-10
相关资源
最近更新 更多