2

我正在尝试使用 LINQ 来查询 MySQL 数据库。

首先,我已经安装了 MySQL .NET 连接器。然后在 Visual Studio 中创建一个新的控制台应用程序。

然后我单击Data工具栏中的 并单击Add New Data Source

在我选择的数据源配置向导Database => Dataset => New Connection中,我配置我的连接参数,然后我选择我的相关表、视图等并点击完成。

我的数据源是命名Foo的,我要查询的表是命名的Bar

然后我尝试使用 LINQ 查询我的数据表,如下所示:

fooDataSet.barDataTable foobar = new fooDataSet.barDataTable();
var results = from data in foobar
              select data;

foreach (var result in results)
{
    Console.WriteLine(result);
};

我假设这相当于下面的 MySQL

SELECT * FROM BAR;

即使我的表(栏)中有大量数据,我也没有得到任何数据。当我适当地断点,并深入到我的结果变量的结果视图中时,它只是说Ж

枚举没有结果

在此处输入图像描述

我在哪里错了?

4

2 回答 2

6

您正在创建一个新表,然后尝试从中读取数据(其中没有任何内容,它是新的!)

在 LINQ to SQL 中,您可以这样做:

var results = from data in fooDataset.bar 
              select data; 

foreach (var result in results) 
{ 
    Console.WriteLine(result); 
}
于 2012-06-28T08:55:56.593 回答
0

我通过在 Windows 窗体上重复初始步骤,将要查询的表从服务器资源管理器拖到 Windows 窗体上,然后分析代码来解决这个问题。

事实证明,我首先需要创建我的数据集 (Foo) 的一个实例,然后为我的表 (Bar) 创建一个 TableAdapter 实例。

完成此操作后,我调用Fill表适配器的方法,使用点表示法传入数据集中的表名。

然后我运行表适配器的 GetData() 的 AsEnumerable() 扩展方法来获取 EnumerableRowCollection,然后我可以使用 LINQ 运行查询。我的代码如下:

static void Main(string[] args)
{
    fooDataSet fooDataSet = new fooDataSet();
    fooDataSetTableAdapters.barTableAdapter barTableAdapter = new fooDataSetTableAdapters.barTableAdapter();

    barTableAdapter.Fill(fooDataSet.bar);

    var myDataTable = barTableAdapter.GetData().AsEnumerable();

    var bnl = from results in myDataTable
              select results;

    Console.ReadLine();
}

旁注,在 Visual Studio 创建的 XSD 文件中,如果您尝试将条件应用于具有任何空值的列,则默认情况下,每个表中的每个字段都设置为引发异常。您需要将 XSD 中字段的 NullValue 属性更改为 (Empty) 或 (Null) 以避免这种情况。

于 2012-06-28T15:22:11.700 回答