繁体   English   中英

如何在 DataTable c# 中选择布尔值?

[英]How do I select boolean value in DataTable c#?

我有一个包含两列的数据库表,例如 Name -varchar(50) 和 Valid -boolen

----------------
Name    Valid
----------------
John    True
John    False
----------------

仅当 Name 为 'John' 且 Valid 为 'True' 时,我才必须选择。 我尝试了下面的代码,但它没有返回任何东西。 请在这方面帮助我。

conList = conTable.Select(string.Format(@"Name='{0}' AND Valid='True'", "John")).ToList();

您可以使用LINQ(-To-DataTable):

var rows = from row in conTable.AsEnumerable()
           where row.Field<bool>("Valid") && row.Field<string>("Name") == "John"
           select row;

如果要从结果中使用新的DataTable ,请使用:

DataTable filtered = rows.CopyToDataTable();

或者,您可以在foreach循环行,或使用ToArrayToList创建其他集合。

通过方法语法合二为一(效率不高):

DataTable filtered = conTable.AsEnumerable()
    .Where(row => row.Field<bool>("Valid") && row.Field<string>("Name") == "John")
    .CopyToDataTable();
conList = conTable.Select(string.Format(@"Name='{0}' AND Valid", "John")).ToList();

您可以为此使用linq。 示例如下。

List<DataRow> dataRows = (from DataRow dr in yourTable.Rows 
                          where (bool)dr["Valid"] == true && (string)dr["Name"] == "John" 
                          select dr).ToList();

dataRows.ForEach(p => Console.WriteLine("Name : {0}, Valid : {1}", p["Name"], p["Valid"]));

如果 Linq 不是一个选项,您可以按照在 sql 中过滤包含位列的表的相同方式过滤 DataTable 中的布尔列。

下面是我快速组合起来的一个示例,用于过滤包含类型为 bool 的数据列的数据表

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Bit", typeof(bool));

dt.Rows.Add(1, true);
dt.Rows.Add(2, true);
dt.Rows.Add(3, false);
dt.Rows.Add(4, true);

// Fetch all columns that have bit set to true
var dr = dt.Select("Bit=1");
Console.WriteLine("ID\tBit");
foreach(DataRow r in dr)
{
 Console.WriteLine("{0}\t{1}", r["ID"], r["Bit"]);
}
Console.WriteLine();

// Fetch all columns that have bit set to false
dr=dt.Select("Bit=0");
Console.WriteLine("ID\tBit");
foreach (DataRow r in dr)
{
Console.WriteLine("{0}\t{1}", r["ID"], r["Bit"]);
}
Console.WriteLine();
Console.ReadLine();

我知道这个问题很老,但它是我自己解决之前的第一个搜索结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM