我想构建自己的mysql类。但我对c#相对较新。
所以在我的想法中,我想建立一些像:
mySqlTool.select("a,b,c").from("foo").where("x=y");
我不知道这是怎么调用的,实际上我真的不知道这是否可能。我的谷歌搜索结束时没有真正的结果。
所以我的问题是:
是否有可能像上面的样本那样做一些?
答案 0 :(得分:3)
创建一个流畅的api并不过分复杂。您只需从每个方法返回该类的当前实例,从而允许它们按照您在帖子中指定的方式进行链接:
public class MySqlTool
{
private string _fields, _table, _filters;
public MySqlTool Select(string fields)
{
_fields = fields;
return this;
}
public MySqlTool From(string table)
{
_table = table;
return this;
}
public MySqlTool Where(string filters)
{
_filters = filters;
return this;
}
public Results Execute()
{
// build your query from _fields, _table, _filters
return results;
}
}
允许您运行如下查询:
var tool = new MySqlTool();
var results = tool.Select("a, b, c").From("someTable").Where("a > 1").Execute();
答案 1 :(得分:1)
看起来你正在尝试做类似于Linq to SQL的事情,但是用MySQL代替。有project called LinqConnect这样做。我与他们没有任何关系。
您可以像这样使用它(来自LinqConnect tutorial):
CrmDemoDataContext context = new CrmDemoDataContext();
var query = from it in context.Companies
orderby it.CompanyID
select it;
foreach (Company comp in query)
Console.WriteLine("{0} | {1} | {2}", comp.CompanyID, comp.CompanyName, comp.Country);
Console.ReadLine();
答案 2 :(得分:1)
我不是个人的忠实粉丝,但如果你只是学习它会很有用。 Linq2SQL可以为您提供开箱即用的功能。
如果您希望自己完成此任务。您需要转到extension methods。 c#中的一个功能,允许您使用静态方法扩展类,在基础上运行。
我建议如果您正在使用自己的数据访问层,那么您应该使用dapper之类的东西(由StackOverflow的工作人员构建/使用)。它为您提供了一个围绕数据库基本连接的简单包装器。它提供简单的ORM功能,并为您进行参数化。
我还强烈建议您将密集型查询封装在存储过程中。
答案 3 :(得分:1)
您要做的是设计a fluent interface,对于刚刚学习C#的人来说,它有点像一个先进的概念。我建议你坚持基础知识,直到你有更多的经验。
更重要的是,已经存在.NET FCL中内置的数据适配器以及更适合的第三方适配器like this one,并且已经使用“LINQ to(数据库)执行了您正在尝试执行的操作”。如果我是你,我不会重新发明轮子。