【问题标题】:How to display results from query with LinqToSQL如何使用 LinqToSQL 显示查询结果
【发布时间】:2015-12-18 14:15:42
【问题描述】:

我被困住了。我想将查询结果显示到数据网格中。

我有一个名为:linq_to_sql.dbml 的 LinqToSQL 类

我有我的数据网格:

<DataGrid x:Name="list_clients"></DataGrid>

这是我的代码:

linq_to_sqlDataContext db = new linq_to_sqlDataContext();
var query = (from c in db.CLIENT select c);
list_clients.ItemsSource = query;

但每次我运行我的应用程序时,它都不起作用:System.InvalidCastException 错误

【问题讨论】:

  • list_clients.ItemsSource = query; 上设置断点。然后在代码停在那个点的情况下,将鼠标光标放在“查询”上并检查它的外观。它必须是一个集合。
  • 如果为 null,我的值是 System.Collections.IEnumerable。
  • 您的查询是否为空?
  • 是的,我的查询为空。但是我开始另一个项目,非常简单,我做了另一个数据库,它在第一次工作。我认为我的第一个错误来自我使用 LinqToSQL 类创建数据库的方式。

标签: c# wpf select linq-to-sql


【解决方案1】:

我可以通过这样做来填充您的 DataGrid:

public WindowDemo01()
{
    InitializeComponent(); // Make sure this occurs first so that your Datagrid is built before your ItemsSource is set.

    var query = (from c in db.CLIENT select new { Name = c.Name });    

    list_clients.ItemsSource = query.ToList();

}

我使用了 fieldname = "Name",因为那是我的表所拥有的。你可以用别的东西。您还可以返回多个字段。

确保您在数据库中的 CLIENT 表与正在设置的数据上下文相同。您可能必须使用服务器资源管理器才能获得所需的内容。

我从未遇到过您遇到的 System.InvalidCastException 错误。我怀疑您的应用程序中可能发生了其他事情。

【讨论】:

    【解决方案2】:

    目前var query不包含你的查询结果,它仍然有你的sql格式的查询(你可以在这一行下一个断点并查看query的值),直到你将此查询转换为某个集合或数据表。为了绑定网格,您需要集合类型或数据表。更改此行:

    list_clients.ItemsSource = query;
    

    list_clients.ItemsSource = query.ToList();
    

    【讨论】:

    • 需要添加query.ToList();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多