2009-09-14 199 views
1

我目前正试图通过MS SQL数据库运行LINQ查询。这就是我所做的。LINQ查询返回无值

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

    MyTableDataSet data = new MyTableDataSet(); 
    var queryResult = 
    from c in data.MyTable 
        select c; 
    
    foreach (var date in queryResult) 
    { 
        // nothing! 
    } 
    
  4. 不知道为什么,但在通过调试“QueryResult中”寻找查询被追赶我得到 - 空=“枚举没有结果”。

我在做LINQ表达错误吗?我猜这是一个'SELECT *'。该表中确实有数据,大约有50行。也许我需要'填充'数据集?我通过服务器资源管理器使用Windows身份验证来查看数据。如果我能从那里看到它,那么代码应该可以访问?不确定。 :|

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

回答

4

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

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

+0

当然!我现在明白了 - 我看不到数据对象下的任何Fill()或Update()方法。谢谢。 – 2009-09-14 02:52:16

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; 
} 
+0

有帮助,干净。 – 2009-09-14 02:53:23