Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到sql转换IQueryable到Dataset_C#_.net_Linq_Linq To Sql - Fatal编程技术网

C# Linq到sql转换IQueryable到Dataset

C# Linq到sql转换IQueryable到Dataset,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,将IQueryable对象转换为dataset最简单的方法是什么?最简单的方法可能是编写一个IDataReader实现,它可以包装一个IEnumerable(IQueryable是一个IEnumerable)。有一个实现。然后可以调用DataTable.Load(IDataReader)。(yourDatacontext).GetCommand(yourIQueryableHere),将命令文本传递给DbCommand对象,调用ExecuteReader,将读取器传递给dataset的.Load

将IQueryable对象转换为dataset最简单的方法是什么?

最简单的方法可能是编写一个IDataReader实现,它可以包装一个IEnumerable(IQueryable是一个IEnumerable)。有一个实现。然后可以调用DataTable.Load(IDataReader)。

(yourDatacontext).GetCommand(yourIQueryableHere),将命令文本传递给DbCommand对象,调用ExecuteReader,将读取器传递给dataset的.Load方法。

正好满足您的需要。如果您周围有datacontext,并且不需要模型中的数据,nitzmahone的解决方案在性能方面是很好的(如果它与您的设置相匹配,这我不清楚)

如果您从模式创建DataTable,使它与LINQ和Sql相匹配,我有一个扩展方法,它接受IQueryable并填充DataTable:

public static DataTable AsDataTable(this IQueryable value, DataTable table)
{
    var reader = value.GetEnumerator();

    while (reader.MoveNext())
    {
        var record = (Customer)reader.Current;
        table.Rows.Add(record.CustomerID, record.City);
    }

    return table;
}
请注意,向客户施展的是我的潜能:

[Table(Name = "Customers")]
public class Customer
{
    [Column(IsPrimaryKey = true)]
    public string CustomerID;
    [Column]
    public string City;
}
还有其他选项使用反射从Customer类构建数据表。考虑到反射对性能的影响,我选择使用以下方法构建表:

public DataTable GetSchema(params string[] columns)
{
    string col_list;

    if (columns.Length == 0)
        col_list = "*";
    else
        col_list = String.Join(", ", columns);

    return Provider.QueryAsDataTable(string.Format("select top 0 {0} from customers", col_list));
}
综合所有这些,我能够将结果推送到我的DataGridView中:

    dgridRO.DataSource = new DataView(rows.AsDataTable(dmap.GetSchema("CustomerID", "City")));

**

ID10T异常: **
我花费了所有的精力来实现从IQueryable到DataTable的转换,这样我就可以创建一个DataView作为DataGridView的源。嗯,我知道我现在不需要这样做。

您将使用数据集做什么?遗留代码需要一个数据集对象。我不清楚OP是否有DataContext或是否正在谈论数据库查询。如果他们是,那么你是对的,这是最简单的。我们只是不知道IQueryable是什么。ModelShreder现在是moreLinq的一部分