2016-01-20 78 views
1

我需要returnID的人員(僱員),具體取決於中寫入的username。 我的邏輯是從textbox獲取username,檢查databasetable,然後returnID找到的用戶名。 但是,我不知道如何返回PersonID,任何人都可以提供幫助,因爲我發現的研究是returning的價值insertedtable而不是我的情況。比較不同列的值後字段的返回ID

業務邏輯代碼:

public List<Person> getEmployeeByID(string empName) 
{ 
    LinqToSqlDataContext database = new LinqToSqlDataContext(); 
    return database.Persons.Where(emp => emp.personName.Contains(empName)).ToList(); 
    //return the ID of the person which carries the textbox's name 
} 

謝謝!

+0

是'empName'在人表中唯一嗎? – Manoj

回答

1

如果有不止一人就應該是這樣的:

public List<String> getEmployeeByID(string empName) 
{ 
    LinqToSqlDataContext database = new LinqToSqlDataContext(); 
    return database.Persons.Where(emp => emp.personName.Contains(empName)).Select(c => c.ID).ToList(); 
} 

或者,如果你想返回只有一個人,你可以使用FirstOrDefaultSingleOrDefault。例如:

public String getEmployeeByID(string empName) 
{ 
    LinqToSqlDataContext database = new LinqToSqlDataContext(); 
    return database.Persons.FirsOrDefault(emp => emp.personName.Contains(empName)).ID; 
} 

另外要注意根據您的需求來改變返回類型的方法來List<String>String。 (我假設你IDString型)

+0

我已經使用'int'方法,因爲'personID'的類型是'int'。 現在我需要從'form'中顯示它,我無法弄清楚當彈出錯誤時如何將該方法應用於'textbox'。 '不能將類型'int'隱式轉換爲'string'。我試圖「解析」,但仍然沒有工作。對不起,很抱歉,但我很新。再次感謝! 'frm.tsslMenu.Text = emp.getEmployeeByID(usernameTxt.Text);' – hurkaperpa

+0

@hurkaperpa ...因此,將方法的返回類型更改爲'int'或'List '。 –

+0

@hurkaperpa ...在將你的方法的返回類型更改爲如下所示的'int'之後:'public int getEmployeeByID(string empName) { LinqToSqlDataContext database = new LinqToSqlDataContext(); return database.Persons.FirsOrDefault(emp => emp.personName.Contains(empName))。ID; '調用它是這樣做的:'frm.tsslMenu.Text = emp.getEmployeeByID(usernameTxt.Text).ToString();' –

1

假設empName是唯一的用戶名,你可以這樣寫:

public int getEmployeeID(string empName) 
{ 
    LinqToSqlDataContext database = new LinqToSqlDataContext(); 
    return database.Persons 
     .Where(emp => emp.personName.Contains(empName)) 
     .Single().Id; 
    //return the ID of the person which carries the textbox's name 
} 

如果有可能empName不匹配數據庫中的任何記錄,你可以檢查這種可能性。在這裏,如果沒有匹配,則返回null,並使用新的C#6語法功能來避免單獨檢查SingleOrDefault()是否返回null。請注意,如果有多個匹配項,這將引發異常,這很可能是您想要的。 FirstOrDefault()會默默地忽略具有相同(假設是唯一的)用戶名的其他行。

public int? getEmployeeID(string empName) 
{ 
    LinqToSqlDataContext database = new LinqToSqlDataContext(); 
    return database.Persons 
     .Where(emp => emp.personName.Contains(empName)) 
     .SingleOrDefault()?.Id; 
    //return the ID of the person which carries the textbox's name 
}