我有一个函数,它接受一个我要转换sql的lambda表达式。
<T> List Search <T> (Expression <Func <T, bool>> criteria) {
/ / The idea is to create a SQL statement, based on criteria
}
我没有使用DataContext。请不要给出答案:
list.Where return (criteria.Compile ()). ToList <TClass> ();
示例:
<Contact> List Search <Contact> (c => c.id == 1 && new == c.birthday DateTime (2000,1,1))
表达树是无用的,我试过,我发现它是不可能的。
请你,如果你不能回应。我更倾向于对一个愚蠢的答案做出零响应甚至没有更接近解决方案。
对不起英语,我正在学习:)。
谢谢和最诚挚的问候。
答案 0 :(得分:6)
表达树没用,
不,他们不是。如果您想在不使用现有代码的情况下自行解决此问题,则需要拆分表达式树以将其转换为SQL(想想表达式树访问者)。表达式树是代码中的lambda表达式在运行时将作为数据呈现给您的方式。
我试过,但我发现它不可能。
这不是不可能,但也不容易。只需看看NHibernate实现。你会发现它是可能的。你会发现这是很多工作。
你为什么要重新发明轮子?
答案 1 :(得分:2)
由于你正在学习表达式,所以你几乎要强迫自己走上表达式树解析的道路。
如果您想知道为什么需要上下文并开始学习如何根据上下文中的元数据来解析表达式树,请参阅Matt Warren从http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx开始的开创性博客系列。
一旦你完成消化,请参阅Franz Bouma关于为LLBLGEN开发LINQ的系列文章:http://weblogs.asp.net/fbouma/archive/2007/09/11/developing-linq-to-llblgen-pro-day-0.aspx。
答案 2 :(得分:0)
你有一个程序员写的Expression <Func <T, bool>> criteria
。让程序员编写sql!