2017-08-01 68 views
-1

我试图在本网站上使用不同的示例,但无法找到解决我问题的示例。无法使用Linq从DataSet获取特定ID的数据

我有一个数据集,我需要得到所有使用Linq该数据集的行与给定的ID

我做了以下内容:

foreach (DataRow dataRow in myData.Tables[0].Rows) 
{ 
    string id = dataRow["id"].ToString().Trim(); 
    var listOfData = myData.Tables[1].Rows.Cast<DataRow>().Where(x => x.Field<string>("id") == id); 
} 

如果这样做,我有一个错误在Field<string>部分说

的DataRow不包含定义字段并没有扩展方法接受领域的DataRow的第一个参数...

我发现实现这一目标的另一种方式:

DataRow[] listOfData = myData.Tables[1].Select("id=" + id); 

和它的作品,但我不希望使用的DataRow [],并希望使用Linq的查询与where条款

什么时我错过了,是否有另一种方式呢?

回答

1

您应该引用System.Data.DataSetExtensions程序集并为System.Data添加使用。 Field<T>()被定义为DataRowExtensions类中的扩展函数。

虽然看到您在for循环中有效地进行了连接,但我会修改用于填充此数据集的查询,并将连接推送到底层数据库以提高性能。

+0

我有需要用到2个数据集。我只需要根据第一个数据库中的第二个数据集获取所有数据 – gene

0

试试这个:

  foreach (DataRow dataRow in dtZeroQtyBonusReceiveRows) 
      { 
       string id = dataRow["id"].ToString().Trim(); 

       var listOfData = zeroQuantityRows.CopyToDataTable().Rows.Cast<DataRow>() 
        .Where(x => Convert.ToString(x["id"]) == id); 
      } 
+0

@gene您是否知道能够使上述简单修复工作? – yido