0

我有这个下表(我想把它作为一个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

4 回答 4

1

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

datatable.Select("ID = 101 AND Branch='North' AND Department = 'Marketing'"); 
于 2012-04-30T20:22:46.167 回答
1

您可以将 DataTable 的 PrimaryKey 设置为前 3 列,然后使用 DataTable 的 Rows.Find(101, "North", "Marketing") 找出该行或如果它不存在则为 null!

于 2012-04-30T20:33:22.577 回答
1

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

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

话虽如此,它和简单的数据表都将是维护的噩梦。我建议您考虑定义明确的类型。

于 2012-04-30T20:33:44.320 回答
1

如果是内存中的少量数据,为什么不使用 LINQ to 对象并为您的数据创建自定义业务对象?它会比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);
}
于 2012-04-30T20:52:56.870 回答