如何在LINQ中使用WHERE?

时间:2012-05-15 10:24:35

标签: c# linq

我正在尝试这个但没有成功

var v=ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23);
GridView1.DataSource=v;
GridView1.DataBind();

gridview只显示一行标题RowError HasRrror,但我希望有一行包含产品信息。

2 个答案:

答案 0 :(得分:0)

试试这个。

var results = from myRow in ds.Table[0].Rows 
              where myRow.Field<int>("productID") == 23
              select myRow;

这应该为您提供所需的行。

答案 1 :(得分:0)

我认为你应该尝试使用CopyToDataTable

ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable();

当您将其转换为Enumerable时,已过滤的列表没有标识ProductID的标识符,因此网格无法映射列并失败。

或者,您也可以选择使用AsDataView()代替CopyToDataTable()

可以找到更详细的解释Binding DataRows

  

数据绑定由ListBindingHelper和TypeDescriptor控制   类。绑定到列表时,   调用ListBindingHelper.GetListItemProperties方法来获取   列表中的列。如果列表实现了ITypedList接口,   调用其GetItemProperties方法。否则,它会使用   TypeDescriptor获取列表中第一个项的属性。   (这使用反射)

     

DataView类(DataTable也绑定,使用   IListSource)实现ITypedList并返回   DataColumnPropertyDescriptors,用于公开表中的列。   这就是您可以绑定到DataView或DataTable并查看列的原因。   但是,绑定到List时,没有ITypedList   可以将列作为属性返回。因此它可以追溯到   反射并显示DataRow类的物理属性。