我有两个选项非常相同,但其中一个(getBranchsForUser
)会抛出错误。
public User GetUserByUsername(string username)
{
var db = new AdventureWorksEntities();
User user = (from u in db.tabUser
where u.strUsername.Equals(username, StringComparison.CurrentCultureIgnoreCase)
select new User
{
strUsername = u.strUsername,
intID = u.intUserID,
}
).FirstOrDefault();
user.branchsList = getBranchsForUser(user.intID);
return user;
}
public List<Branch> getBranchsForUser(int userID)
{
var db = new AdventureWorksEntities();
List<Branch> branchsList = (from u in db.tabBranchs
where u.intUserID.Equals(userID)
select new Branch
{
dblGoal = u.dblGoal,
intNbOfGradeForAYear = u.IntNBOfGradeForAYear,
strName = u.strName
}
).ToList();
return branchsList;
}
我在getBranchsForUser方法中遇到以下错误:
[System.NotSupportedException] {“LINQ to Entities不支持指定的类型成员'intUserID'。仅支持初始值设定项,实体成员和实体导航属性。”}
System.NotSupportedException
为什么我的GetUserByUsername
方法也没有? (我做同样的事情)
修改 表定义:
CREATE TABLE [dbo].[tabBranchs] (
[intBranchID] INT NOT NULL,
[intUserID] INT NOT NULL,
[strName] TEXT NOT NULL,
[dblGoal] FLOAT (53) NULL,
[IntNBOfGradeForAYear] INT NOT NULL,
CONSTRAINT [PK_tabBranchs] PRIMARY KEY CLUSTERED ([intBranchID] ASC),
CONSTRAINT [FK_tabBranchs_ToTable] FOREIGN KEY ([intUserID]) REFERENCES [dbo].[tabUser] ([intUserID])
);
CREATE TABLE [dbo].[tabUser] (
[intUserID] INT NOT NULL,
[strUsername] VARCHAR (MAX) NOT NULL,
[strPassword] VARCHAR (MAX) NOT NULL,
CONSTRAINT [PK_tabUser] PRIMARY KEY CLUSTERED ([intUserID] ASC)
);
编辑2
public class Branch {
public string strName { get; set; }
public List<Mark> markList { get; set; }
public double dblAverage { get; set; }
public double? dblGoal { get; set; }
public bool bHasGoal { get; set; }
public int intNbOfGradeForAYear { get; set; }
public Branch(){}
public Branch(string branchName, double goal, int nbOfNotes)
{
// TODO: Complete member initialization
this.strName = branchName;
this.dblGoal = goal;
bHasGoal = true;
this.intNbOfGradeForAYear = nbOfNotes;
}
答案 0 :(得分:0)
我认为您正在尝试映射未映射到Where表达式中的数据库列的属性。您必须基于映射的属性构建表达式。我认为没有映射的intUserID正在发生错误。希望这会有所帮助。
public class Branch {
public string strName { get; set; }
public List<Mark> markList { get; set; }
public double dblAverage { get; set; }
public double? dblGoal { get; set; }
public bool bHasGoal { get; set; }
public int intNbOfGradeForAYear { get; set; }
public int intUserID { get; set; } //map it
public Branch(){}
public Branch(string branchName, double goal, int nbOfNotes,int userID) // add userID
{
// TODO: Complete member initialization
this.strName = branchName;
this.dblGoal = goal;
bHasGoal = true;
this.intNbOfGradeForAYear = nbOfNotes;
this.intUserID = userID; // map it
}
}
答案 1 :(得分:0)
可能是因为intUserID参与了FK约束
CONSTRAINT [FK_tabBranchs_ToTable] FOREIGN KEY ([intUserID]) REFERENCES [dbo].[tabUser] ([intUserID])
您可以尝试这样做,只是为了解决问题
where u.tabUser.intUserID.Equals(userID)
如果这样做,那么还需要仔细检查以下查询是否没有导致不必要的连接