2013-10-30 31 views
0

我正在尝试第http://forums.asp.net/t/1320587.aspx, 中提到的第一个解决方案将linq结果返回给数据集。 但在'mdb'之后我没有得到'GetCommand'属性。 错误说MedianEntities不包含'GetCommand'的定义。你错过了一个装配。将Linq结果返回给数据集 - GetCommand不是属性

我还应该包括什么来解决这个问题。

public DataSet GetAllRecords() 
    { 
    DataSet ds = new DataSet(); 
    MEDIANEntities mdb = new MEDIANEntities(); 
    var query = (from j in mdb.tblCountries 
       orderby j.CountryName ascending select j); 
    SqlCommand cmd = (SqlCommand)mdb.GetCommand(query);  //error here 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    da.Fill(ds); 
    return ds; 
    } 

使用.Netframework 4.0和实体模型

+0

其他,我不SE e你将LINQ结果放入数据集的地方...... –

+0

oops错过了一个单词。更新了 – Ruby

回答

0

的DataContext和GetCommand是LINQ到SQL,你要使用LINQ到实体工作。

存在多个问题,您的实体MEDIANEntities可能是DbContext,GetCommand是DataContext类。

另一个问题是您的“查询”不是IQueryable,需要从您的查询中删除.AsEnumerable()。

您可以在query上使用CopyToDataTable<DataRow>()来代替您的需求。 http://msdn.microsoft.com/en-us/library/bb396189.aspx

另一个选项,它应该可以工作,但可能是hacky,因为您将DataContext(linq-to-sql)与(linq-to-entity)混合使用。类似的东西:

    using (DataContext ctx = new DataContext(mdb.Database.Connection)) 
        { 
         DataSet ds = new DataSet(); 
         var query = (from j in mdb.tblCountries 
            orderby j.CountryName ascending 
            select j); 
         SqlCommand cmd = (SqlCommand)ctx.GetCommand(query); 
         SqlDataAdapter da = new SqlDataAdapter(cmd); 
         da.Fill(ds); 
         return ds; 
        } 

上GetCommand更多信息:

DataContext.GetCommand

命名空间:将System.Data.Linq

大会:System.Data.Linq程序(在System.Data .Linq.dll),比错误

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.getcommand.aspx

+0

添加了参考&命名空间,但仍然是相同的错误。 – Ruby

+0

我更新了更多信息的答案... –

+0

谢谢。删除Enumerable。我使用ADO.Net实体数据模型创建了一个edmx文件,并将其放在类库'MedianContext'中。所以这将是一个dbcontext现在或datacontext。我尝试了copyto..method,但是我发现上面的选择更简单得多。请告诉我,我该怎么做才能这样做。 – Ruby