C#使用某种子方法创建方法

时间:2016-12-28 15:48:49

标签: c# mysql

我想构建自己的mysql类。但我对c#相对较新。

所以在我的想法中,我想建立一些像:

mySqlTool.select("a,b,c").from("foo").where("x=y");

我不知道这是怎么调用的,实际上我真的不知道这是否可能。我的谷歌搜索结束时没有真正的结果。

所以我的问题是:

是否有可能像上面的样本那样做一些?

4 个答案:

答案 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(数据库)执行了您正在尝试执行的操作”。如果我是你,我不会重新发明轮子。