2016-03-30 40 views
0

我有兩個選擇是完全相同的,但其中一個(getBranchsForUser)會引發錯誤。爲什麼LINQ to Entities在這個select語句中拋出錯誤?

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] {「指定的類型成員 'intUserID' 不是在LINQ支撐到實體只有初始化器,實體成員和實體導航屬性都支持。「}
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) 
); 

EDIT 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

屬性'intUserID'是否映射到數據庫se列? – Jehof

+0

你如何確定'intUserId'的值?這是一個計算列還是直接來自您的數據庫? – Szeki

+0

它直接來自我的數據庫 – joohn

回答

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 
    } 
} 
+0

如何在映射屬性上構建表達式? – joohn

+0

編輯2映射intUserID。添加屬性並分配它。 – bluetoothfx

+0

我已經添加了你寫的東西,但它仍然不起作用,它是完整的解決方案嗎? – joohn

0

這可能是因爲intUserID在FK約束

CONSTRAINT [FK_tabBranchs_ToTable] FOREIGN KEY ([intUserID]) REFERENCES [dbo].[tabUser] ([intUserID]) 

參加你可以試試這個來代替,只是爲了解決

where u.tabUser.intUserID.Equals(userID) 

如果一切正常的話,那也有必要仔細檢查下列查詢是否不會導致不必要的連接

+0

我無法使用u.tabUser訪問tabUser,因爲用戶擁有該分支 – joohn

相關問題