为什么这个Linq查询不在Dictionary <tkey,tvalue =“”>作为DataSource </tkey,>

时间:2010-12-21 18:52:07

标签: vb.net winforms linq datagridview datasource

我在VB中有以下内容:

Dim sources = From source In importSources Select New With _
    {.Type = source.Key, .Source = source.Value.Name}

dgridSourceFiles.DataSource = sources

当我调试时,sources显示内存中查询并且其中有2条记录。然而,datagrid视图不会显示记录。

那么为什么这不起作用?建议可以是VB或C#...

更新

当我使用时:

Dim sources = (From source In importSources Select New With _
    {.Type = source.Key, .Source = source.Value.Name}).ToList()

...显示数据源。

2 个答案:

答案 0 :(得分:6)

您的LINQ查询被懒惰地评估并且仅实现IEnumerable<T>接口(据我所知),这意味着在枚举器在某处调用MoveNext之前不会建立它的结果(如同{例如,{1}}循环。

似乎foreach属性不会以这种方式枚举其内容。它完全期望DataSource(或其他一些接口之一 - 见下文)的实现,以便它可以按索引访问项目。这由控件在内部用于排序,过滤等。考虑到这一点,所有设置IList属性的工作都可能是检查对象的类型以查看它是否实现了任何支持的接口。所以我认为DataSource属性不是为了处理这种类型的对象(一个懒惰的评估查询)而设计的。

现在,DataSource调用会使用您的查询结果填充ToList;此 实施List<T>,因此可以用作IList

我的理解是,DataSource仅仅作为DataSource输入的原因是它需要以下接口的任何

这是根据MSDN documentation

答案 1 :(得分:1)

设置源后,您可能需要调用DataBind。尝试:

dgridSourceFiles.DataSource = sources
dgridSourceFiles.DataBind()