为什么LINQ to Entities在此select语句中抛出错误?

时间:2016-03-30 06:42:16

标签: linq select

我有两个选项非常相同,但其中一个(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;
    }

2 个答案:

答案 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)

如果这样做,那么还需要仔细检查以下查询是否没有导致不必要的连接