我正在尝试使用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;
即使我的表(栏)中有大量数据,我也没有收到任何数据。当我适当地断点,并深入到我的结果变量的结果视图时,它只是说Ж
枚举没有结果
我在哪里错了?
答案 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)以避免这种情况。