当前位置:编程学习 > C#/ASP.NET >>

怎么把自己的方法,翻译成sql语句

举例:

DataContext ctx = new DataContext(conn);//构建DataContext
Table<DS.Model.test> t_table = ctx.GetTable<DS.Model.test>();
var stringlist =new List<string >{"aaa","bbb","ccc"};
//创建linq查询
var ct = from c in t_table 
        where stringlist.Contains(c._string)
        select c._string;
//获取命令
DbCommand cmd = ctx.GetCommand(ct);
//将sql语句打出
Response.Write(cmd.CommandText + "<br/>");
//将参数打出
foreach (DbParameter parm in cmd.Parameters)
{Response.Write(string.Format("参数名:{0},参数值:{1}<br/>", parm.ParameterName, parm.Value));}


结果:
SELECT [t0].[_string] FROM [test] AS [t0] WHERE [t0].[_string] IN (@p0, @p1, @p2)
参数名:@p0,参数值:aaa
参数名:@p1,参数值:bbb
参数名:@p2,参数值:ccc

也就是说,.net将List<>的Contains方法,翻译成了SQL语句([t0].[_string] IN (@p0, @p1, @p2))
那么,如果我希望实现


var ct = from c in t_table 
        where myFun(c._string)
        select c._string;
...
public bool myFun(string str){...}

以上的myFun()类似于List<>.Contains()一样既可以正常使用,又可以在ToSQL中翻译成SQL语句,该在哪里写?以什么方式写?
--------------------编程问答-------------------- 写成扩展方法或:
http://blog.csdn.net/q107770540/article/details/5387946 --------------------编程问答-------------------- Expression<Func<string, bool>> myFun = new Expression<Func<string, bool>>(x => ...);

var ct = from c in t_table.Where(myFun)
         select c._string; --------------------编程问答-------------------- 你们竟然看懂了什么意思 --------------------编程问答-------------------- 动态SQL啊
写起来比较复杂 --------------------编程问答-------------------- “又可以在ToSQL中翻译成SQL语句”

你先手工写一个示意出来。如果你都不能示意,那么程序十有八九会曲解你的意思。
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,