根据三个键/值查询值

时间:2012-04-30 20:19:55

标签: c# datatable

我有下表(我想把它作为datatable,但我很灵活):

ID(int)   Branch(string)   Department(string)   Available(Boolean)

 101          North           Sales               True
 101          North           Marketing           False
 102          North           Security            True
 103          South           Sales               True
 ...          ...             ...                 ...

我希望能够通过Available

查询[ID][Branch][Department]

[101]["North"]["Marketing"]这样的内容会给我False,或者至少告诉我表中是否存在包含[101]["North"]["Marketing"]的行。

最有效的方法是什么? 如果您认为它比datatable

更有效,请随意建议其他结构

4 个答案:

答案 0 :(得分:1)

您可以使用DataTable的Select方法。 像

datatable.Select("ID = 101 AND Branch='North' AND Department = 'Marketing'"); 

答案 1 :(得分:1)

您可以将DataTable的PrimaryKey设置为前3列,然后使用DataTable的Rows.Find(101,“North”,“Marketing”)来删除行,如果不存在则获取null!

答案 2 :(得分:1)

  

我应该补充一点,它不会出现在某个数据库中。它只是作为一个小的查找表在内存中。可能不会超过20行。

在这种情况下,对于性能和内存占用而言,最高效的方法是使用Branch和Department的枚举并使用三嵌套数组方法。

有人说过,它和简单的数据表都是维护的噩梦。我建议你考虑明确定义的类型。

答案 3 :(得分:1)

如果内存中存在少量数据,为什么不将LINQ用于对象并为数据创建自定义业务对象?它比DataTable更有效。

public class Branch
{
  public int ID {get;set;}
  public string BranchName {get;set;}
  public string Department {get;set;}
  public bool Available {get;set;}
}

public bool BranchExists(int id, string branch, string dept)
{
   //assume "Branches" is your in-memory list
   return Branches.Any(b => b.id == id && b.BranchName == branch && b.Department == dept);
}