LINQ查询返回无值

时间:2009-09-14 02:41:33

标签: c# visual-studio-2008 linq dataset strongly-typed-dataset

我目前正在尝试在MS SQL数据库上运行LINQ查询。这就是我所做的。

  1. 如果我想通过Server Explorer,我可以看到数据库,表格和数据。
  2. 我已经从“添加新项目...”自动创建了一个新的数据集。然后我将表从服务器资源管理器拖到DataSet的设计器视图中。出现正确的表格和列标题。我们称之为“MyTableDataSet”。
  3. 在我的代码中,当我需要查询时,这就是我的代码。

     MyTableDataSet data = new MyTableDataSet ();
     var queryResult =
     from c in data.MyTable
        select c;
    
     foreach (var date in queryResult)
     {
        // nothing!
     }
    
  4. 不确定原因,但在运行查询后通过调试器查看'queryResult'我得到 - Empty =“枚举没有结果”。
  5. 我是否在使用LINQ表达式做错了什么?我猜这是'SELECT *'。该表中有数据,大约有50行。也许我需要'填充'数据集?我通过服务器资源管理器使用Windows身份验证来查看数据。如果我可以从那里看到它,那么代码也应该有访问权限?不确定。 :|

    感谢您在解决此问题时给予的任何帮助。

2 个答案:

答案 0 :(得分:4)

根据您的代码,您正在创建一个新数据集并立即查询它。它当然是空的。

您必须使用在数据集设计器中拖动表时创建的表适配器来填充数据集。

答案 1 :(得分:1)

以下是使用DataTable

的工作示例
var queryResult = from c in data.MyTable select c;
DataTable dt = ToDataTable(yourDataContext, queryResult);

foreach (DataRow dr in dt.Rows)
{
  // ...
}
dt.Dispose();

ToDataTable函数为from here

public DataTable ToDataTable(System.Data.Linq.DataContext ctx, object query)
{
     if (query == null)
     {
          throw new ArgumentNullException("query");
     }

     IDbCommand cmd = ctx.GetCommand(query as IQueryable);
     SqlDataAdapter adapter = new SqlDataAdapter();
     adapter.SelectCommand = (SqlCommand)cmd;
     DataTable dt = new DataTable("sd");

     try
     {
          cmd.Connection.Open();
          adapter.FillSchema(dt, SchemaType.Source); 
          adapter.Fill(dt);
     }
     finally
     {
          cmd.Connection.Close();
     }
     return dt;
}