C# c Linq到sql-未分配class元素

C# c Linq到sql-未分配class元素,c#,linq,linq-to-sql,invalidoperationexception,C#,Linq,Linq To Sql,Invalidoperationexception,我有一个带BaseRootUser类的PCL public class BaseRootUser : IUser { public virtual int RootUserID { get; set; } public virtual int TypeID { get; set; } public virtual string Username { get; set; } public virtual string Password { get; set;

我有一个带BaseRootUser类的PCL

public class BaseRootUser : IUser
{
    public virtual int RootUserID { get; set; }

    public virtual int TypeID { get; set; }

    public virtual string Username { get; set; }

    public virtual string Password { get; set; }

    public virtual int ClinicID { get; set; }

    public virtual bool IsDeleted { get; set; }
}
以及具有此类的Serverproject:

[Table]
public class RootUser : BaseRootUser {

    [Column(IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true)]
    public override int RootUserID { get; set; }

    [Column]
    public override int TypeID { get; set; }

    [Column]
    public override string Username { get; set; }

    [Column]
    public override string Password { get; set; }

    [Column]
    public override int ClinicID { get; set; }

    [Column]
    public override bool IsDeleted { get; set; }
}
现在,我想从数据库中获取一个root用户,如下所示:

public static RootUserController Get(DataContext db, int baseUserID) {

        try {
            IQueryable<RootUser> query =
            from rootUser in db.GetTable<RootUser>()
            where rootUser.RootUserID == baseUserID
            select rootUser;

            RootUser ru = query.Single<RootUser>();
            return new RootUserController(ru);
        } catch (Exception ex) {
            Globals.MessageController.CreateMessage(ex.ToString(), colour: ConsoleColor.Red);
            return null;
        }
    }
行RootUser ru=query.Single;引发InvalidOperationException,告诉我类元素BaseRootUser.Username未分配。原始消息:System.InvalidOperationException:Das Klassenelement BaseRootUser.用户名是nicht zugeordnet

如果我从基础中删除属性Username,它将按预期工作。 这是一个错误还是我做错了什么

谢谢你的帮助

编辑 有趣的是:这很有效

IQueryable<RootUser> query =
from rootUser in db.GetTable<RootUser>()
select rootUser;

var all = query.ToList();
var ru = all.Where(u => u.Username == username).FirstOrDefault();
return new RootUserController(ru);

谢谢你的回复。我用FirstOrDefault试过,同样的事情也发生了。顺便说一句:有一条数据库记录的用户名为Daniel.Martin,我正在查找这个字符串。如果以下任何一个条件在该方法中匹配,您将得到InvalidOperationException。Single方法:没有元素满足谓词中的条件-或-多个元素满足谓词中的条件-或-源序列为空。如果在LINQ语句上设置断点,用户名是唯一为空的吗?查询显示:{SELECT[t0].[RootUserID],[t0].[TypeID],[t0].[Username],[t0].[Password],[t0].[ClinicID],[t0].[IsDeleted]FROM[RootUser]作为[t0]其中[t0].[Username]=@p0}或者您的意思不同吗?
IQueryable<RootUser> query =
from rootUser in db.GetTable<RootUser>()
select rootUser;

var all = query.ToList();
var ru = all.Where(u => u.Username == username).FirstOrDefault();
return new RootUserController(ru);