LINQ to SQL的转换的IQueryable到数据集(Linq to sql convert

2019-07-21 03:07发布

什么是一个IQueryable对象转换为数据集的最简单的方法?

Answer 1:

modelshredder有正是你需要的。 如果你有DataContext的周围,不需要你的模型也方面的数据,nitzmahone的解决方案是优良的性能明智的(如果你的设置,这是我不清楚匹配)



Answer 2:

(yourDatacontext).GetCommand(yourIQueryableHere),传递命令文本到DbCommand对象,调用ExecuteReaer,通过读取器数据集的方法.Load。



Answer 3:

最容易做的事情可能是写的IDataReader的实现,可包装器一个IEnumerable(IQueryable的是IEnumberable)。 有一个执行在这里 。 然后,你可以调用DataTable.Load(IDataReader的)。



Answer 4:

如果您创建架构的DataTable所以你的LINQ匹配SQL中,我有采取的IQueryable并填充数据表的扩展方法:

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

需要注意的是投给客户是我TEntity:

[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")));


**

ID10TException:

**我花了这一切的努力得到来自IQueryable的转换到数据表,这样我可以创建一个数据视图作为源到DataGridView。 嗯,我知道我没有必要做了。



文章来源: Linq to sql convert IQueryable to Dataset