【问题标题】:Cannot implicitly convert type.. Error无法隐式转换类型.. 错误
【发布时间】:2015-03-30 01:22:33
【问题描述】:

我用谷歌搜索了这个错误并得到了各种各样的结果,没有一个真正适合我的情况。

我目前有一个用于 Web 表单中的身份的 CRUD(脚手架),可用作用户配置文件。

我有这个

public IQueryable<WebApplication2.Models.MyAppUser> GetData()
{
    var currentUser = _db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
    return currentUser;
}

但是我得到了这个错误:

错误 1 ​​无法隐式转换类型 'WebApplication2.Models.MyAppUser' 到 'System.Linq.IQueryable'。一个 存在显式转换(您是否缺少演员表?)

正如我所说,我做了一些研究。我相信这是因为我试图返回一个 var.. 但是我不知道如何正确处理这个问题。我已经尝试创建一个可以执行此操作的函数,但对我来说也没有成功。

请帮忙。

我使用的是 Web 表单(不是 MVC)

【问题讨论】:

    标签: c# asp.net webforms user-profile


    【解决方案1】:

    您要么使用了错误的 LINQ 方法,要么使用了错误的方法签名。

    FirstOrDefault 方法返回单个 MyAppUser,而不是 IQueryable&lt;MyAppUser&gt;。您有两种选择来解决此问题:

    • FirstOrDefault 调用替换为Take(1) 调用

    方法如下:

    return _db.Users.Where(u => u.UserName == User.Identity.Name).Take(1);
    
    • 更改方法签名以返回MyAppUser 而不是IQueryable&lt;MyAppUser&gt;

    这两个修复程序都可以编译您的代码。选择其中一个取决于您的应用程序中 GetData 方法的使用。

    【讨论】:

      【解决方案2】:

      第一:为什么要返回 IQueryable 你只需要返回一个对象

      第二:实体对象中的 cuurentUser 您应该将其转换为您的域模型:

      public WebApplication2.Models.MyAppUser GetData()
      {
          var currentUser = _db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
          return currentUser ;
      }
      

      或者

      public IQueryable<WebApplication2.Models.MyAppUser> GetData()
      {
         return _db.Users.Where(u => u.UserName == User.Identity.Name);                       
      }
      

      【讨论】:

      • 感谢您的快速回复!我让它工作。 IQueryable 来自脚手架生成的代码。没有它我得到一个错误。
      • 您可以添加新方法或代替 retutn 单个对象返回列表
      猜你喜欢
      • 2014-02-12
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2015-05-22
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多