LINQ to MySQL查询返回无结果

时间:2012-06-28 08:48:12

标签: c# .net mysql linq linq-to-sql

我正在尝试使用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;

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

  

枚举没有结果

enter image description here

我在哪里错了?

2 个答案:

答案 0 :(得分:6)

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

在LINQ to SQL中,你会这样做:

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

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

答案 1 :(得分:0)

我通过重复Windows窗体上的初始步骤,将我想要从Server Explorer查询的表拖到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)以避免这种情况。