比较不同列的值后返回字段的ID

时间:2016-01-20 15:28:04

标签: c# mysql database linq linq-to-sql

我需要return该人员({1}},ID,具体取决于username中写的toolstripstatuslabel。 我的逻辑是从username获取textbox,检查database table,然后return找到用户名的ID。 但是,我不知道如何返回PersonID,任何人都可以提供帮助,因为我发现returning inserted的{​​{1}}价值不是我的情况。

业务逻辑代码:

table

谢谢!

2 个答案:

答案 0 :(得分: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。 (我假设您的ID类型为String

答案 1 :(得分: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
}