C#-将linq查询转换为可移植类中的SQL语句

C#-将linq查询转换为可移植类中的SQL语句,c#,sql,linq,C#,Sql,Linq,我想创建一个支持多平台(移动、桌面、Web)的可移植类库 此库将使用Rest API(ASP API)。。我想要的是在portable类中编写LINQ语句,然后将其转换为字符串形式的SQL语句,然后将其发送到web服务 我发现它需要一个数据库提供程序来生成SQL语句。。那么有什么想法来做这个吗 更新: 我的工作是: private IEnumerable<MemberExpression> DevideExpressions(Expression condition) {

我想创建一个支持多平台(移动、桌面、Web)的可移植类库 此库将使用Rest API(ASP API)。。我想要的是在portable类中编写LINQ语句,然后将其转换为字符串形式的SQL语句,然后将其发送到web服务 我发现它需要一个数据库提供程序来生成SQL语句。。那么有什么想法来做这个吗

更新:

我的工作是:

private IEnumerable<MemberExpression> DevideExpressions(Expression condition)
    {
        var candidates = new Queue<Expression>(new[] { condition });


        while (candidates.Count > 0)
        {
            var expr = candidates.Dequeue();
            if (expr is MemberExpression)
            {
                yield return ((MemberExpression)expr);
            }
            else if (expr is UnaryExpression)
            {

                candidates.Enqueue(((UnaryExpression)expr).Operand);
            }
            else if (expr is BinaryExpression)
            {
                var binary = expr as BinaryExpression;
                candidates.Enqueue(binary.Left);
                candidates.Enqueue(binary.Right);

            }
            else if (expr is MethodCallExpression)
            {
                var method = expr as MethodCallExpression;
                foreach (var argument in method.Arguments)
                {
                    candidates.Enqueue(argument);


                }
            }
            else if (expr is LambdaExpression)
            {
                candidates.Enqueue(((LambdaExpression)expr).Body);

            }
        }

    }
private IEnumerable设备表达式(表达式条件)
{
var候选者=新队列(新[]{condition});
while(candidates.Count>0)
{
var expr=candidates.Dequeue();
if(expr是MemberExpression)
{
收益率返回((MemberExpression)expr);
}
else if(expr是UnaryExpression)
{
Enqueue(((UnaryExpression)expr).Operand);
}
else if(expr是二进制表达式)
{
var binary=expr作为二进制表达式;
候选者。排队(二进制。左);
Enqueue(binary.Right);
}
else if(expr是MethodCallExpression)
{
var method=expr为MethodCallExpression;
foreach(method.Arguments中的var参数)
{
候选人。排队(论点);
}
}
else if(expr是LambdaExpression)
{
Enqueue(((LambdaExpression)expr.Body);
}
}
}
因此有两种情况: 1-代码如下所示:

var result = MyDb.Select<Users>(f=> f.UserName == "my name");
string name = "my name";
var result = MyDb.Select<Users>(f=> f.UserName == name);
var result=MyDb.Select(f=>f.UserName==“我的名字”);
它给我字符串结果: “用户名=\“我的名字” 因此,我可以轻松地将其处理为SQL

2-代码如下所示:

var result = MyDb.Select<Users>(f=> f.UserName == "my name");
string name = "my name";
var result = MyDb.Select<Users>(f=> f.UserName == name);
string name=“我的名字”;
var result=MyDb.Select(f=>f.UserName==name);
它给我字符串结果: “用户名=值(DbEntityWpf.MainWindow).name”


因此,我希望在运行时将()的值作为字符串获取的主要问题。。如果发生这种情况,一切都会好起来。

IQToolkit在2011年被放弃。可能对您更有用。可移植类库没有Linq2Sql或实体框架。。因此,我无法使用这些解决方案:)