【发布时间】:2010-10-14 09:14:38
【问题描述】:
我正在尝试对类型化的 DataTable 执行简单的 Linq“先查找”查询,但似乎无法正确获取语法。
(如果我不使用类型化的数据表/行对象,一切正常。)
我有这个……
class Program
{
static void Main(string[] args)
{
MyDataTable table = new MyDataTable("table");
table.Rows.Add(1, "Hello");
table.Rows.Add(2, "There");
table.Rows.Add(1, "World");
table.Rows[0].Delete();
Func<MyDataRow, Boolean> func = (row) => row.One == 1;
var row1 = table.AsEnumerable().First(func);
}
private class MyDataTable : DataTable
{
public MyDataTable()
{
this.Columns.Add("One", typeof(Int32));
this.Columns.Add("Two", typeof(String));
}
public MyDataTable(String tableName) : this() { this.TableName = tableName; }
protected override Type GetRowType()
{
return typeof(MyDataRow);
}
protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
{
return new MyDataRow(builder);
}
public IEnumerable<MyDataRow> AsEnumerable()
{
foreach (MyDataRow row in this.Rows)
{
yield return row;
}
}
}
private class MyDataRow : DataRow
{
internal MyDataRow(DataRowBuilder builder) : base(builder) { }
public int One
{
set { this["One"] = value; }
get { return Convert.ToInt32(this["One"]); }
}
public String Two
{
set { this["Two"] = value; }
get { return Convert.ToString(this["Two"]); }
}
}
}
我也试过这个(显然没有用);
private class MyDataTable : DataTable
{
:
public EnumerableRowCollection<MyDataRow> AsEnumerable()
{
return base.AsEnumerable();
}
}
所以,我的问题是:
为了使用 Linq 确定类型数据表中是否存在一条或多条记录,我需要实现什么?例如,我是否需要重写“AsEnumerable”,还是可以在 MyDataTable 类上编写“First”方法?
或者我是否必须做一些笨拙的事情,比如将 MyDataTable 转换为 DataTable 并将行视为 DataRow 对象?
谢谢,
【问题讨论】:
标签: c# linq strongly-typed-dataset