在LINQ上使用DataTable的地方

时间:2013-03-16 15:23:27

标签: c# linq c#-4.0 datatable

var results = from myRow in dsPac.AsEnumerable()
              where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text)
              select myRow;

dsPac包含

enter image description here

我想选择与Package1712200466相对应的数据,即

enter image description here

当我绑定到GridView时,我收到以下错误

DataBinding: 'System.Data.DataRow' does not contain a property
with the name 'Holiday_ID'.

2 个答案:

答案 0 :(得分:5)

在过去,当我想要绑定到GridView的数据行时,我创建了一个对象来执行此操作。在这种情况下,您可以使用Linq查询来创建一个可以解决问题的匿名对象。

 var results = from myRow in dsPac.AsEnumerable()
               where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text)
               select new { Holiday_ID = myRow["Holiday_ID"],
                            Holiday_Description = myRow["Holiday_Description"],
                            Holiday_Date = myRow["Holiday_Date"] };

我不相信直接绑定到行会有效 - 请参阅异常文本。通过Item []索引器访问行列,因此您需要编写WPF转换器以实现相同的效果。总之,浪费时间,因为Linq查询将起作用。

答案 1 :(得分:3)

或者,您可以使用AsDataView()将行集合转换回GridView将能够绑定到的DataView。

var results = (from myRow in dsPac.AsEnumerable()
              where myRow.Field<string>("Package_Name").Equals(lblPackageName.Text)
              select myRow).AsDataView();