2016-01-20 73 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 
}