4

我正在尝试从SQL数据库中获取第一个用户,该用户正在与具有我正在寻找的用户的用户IDEntity model的现有数据库进行通信。这和第二个错误出现。

无法将 lambda 表达式转换为委托类型 System.Func<iomnientitylibrary.user,bool>,因为块中的某些 返回类型不能隐式转换为委托返回类型。

无法将类型隐式转换intbool.

public user GetUser(int userID)
{
     using (var context = new iomniEntities())
    {
        user u = context.users.FirstOrDefault(user => user.userID);

        return u;
    }
}

context.users.ToList()工作正常,但我不想那么低效

4

7 回答 7

7

使用表达式时:user u = context.users.FirstOrDefault(user => user.userID); 返回类型是 userID (这由 Lambda 表达式的第二部分确定)而不是类型: 'user' ,该语句期望根据声明:user u

因此,如果您想返回一个user 用户 ID 为 'userID' 的单曲,请使用:

user u = context.users.FirstOrDefault(user => user.userID==userID);

或者您也可以使用:

user u = context.users
         .Where(user => user.UserId==UserID)
         .Select(user => user).Single();

还要确保你有 Using 语句:using System.Linq;

于 2013-07-23T15:06:08.557 回答
1

我认为您的语法稍有偏差。尝试:

public user GetUser(int intUserID)
{
     using (var context = new iomniEntities())
    {
        user u = context.users.Where(u => u.userID == intUserID).FirstOrDefault();

        return u;
    }
}

或者要保留您的版本,只需对其进行修改:

public user GetUser(int intUserID)
{
     using (var context = new iomniEntities())
    {
        user u = context.users.FirstOrDefault(user => user.userID == intUserID);

        return u;
    }
}
于 2013-07-23T00:20:45.943 回答
1

您的FirstOrDefault方法中的表达式不正确 - 它需要一个返回 a 的表达式,bool而您给它user => user.userID返回一个int.

只需重写它以考虑您传入的参数:user => user.userID == userID

也就是说,如果没有 2 个具有相同 ID 的用户,您可能最好使用context.Users.SingleOrDefault(user => user.userID == userID).

于 2013-07-23T00:32:00.093 回答
0

Your lambda is wrong, it needs to return a boolean and yours just returns the .userID.

You need to use some kind of comparison, like:

user => user.userID == 10

FirstOrDefault returns the first or default (null in your case) of the items that match the lambda expression. It does not return the first item in the list which is what I think you are wanting. Without knowing what the context.Users data type is, I can't tell you a better way to do this.

You could use something like:

user => user != null

于 2013-07-23T00:54:33.087 回答
0

像其他人提到的那样,您需要稍微调整代码来进行比较。无论如何,我会使用 Single/SingleOrDefault 来完成,因为您希望获得与提供的用户 ID 匹配的单个用户。

user u = context.users.SingleOrDefault(u => u.userID == userID);

或者只是做回报

return context.users.SingleOrDefault(u => u.userID == userID);
于 2020-03-03T12:23:46.890 回答
0

'user' 类的检查属性被声明为公共的。

像这样

public class user
{
    [Key]
    public int id { get; set; }
    public string name { get; set; }
    public string password { get; set; }

}
于 2020-06-08T23:20:00.643 回答
-1

您必须根据“UserId”过滤用户,然后选择第一个。所以查询应该是这样的:

User user = context.Users.Where(x=>x.UserId == UserId).FirstOrDefualt();
于 2016-10-12T20:00:33.473 回答