因此,我通過創建一個很好的數據訪問層與我自己和C#開心。Lambda到SQL的翻譯
我有以下的方法進行並行運動的簡單表達一個SQL where子句,但只用下面的
var people = DataAccessLayer.SelectAllPeople(x => x.Name == "Donald");
//Do some changes to the list
people[0].Surname = "Jansen"
var m = p.BuildUpdateQuerry(people[0], x => x.PersonID == 1);
我得到以下結果
UPDATE People SET Name='Donald',Surname='Jansen' WHERE (PersonID = 1)
的作品,但現在如果我請執行以下操作:
var m = p.BuildUpdateQuerry(people[0], x => x.PersonID == people[0].PersonID);
我得到以下結果
UPDATE People SET Name='Donald',Surname='Jansen' WHERE (PersonID = value(ReflectionExampleByDonaldJansen.Program+<>c__DisplayClass0).people.get_Item(0).PersonID)
我的方法,我用的LAMBDA轉換爲字符串是
public static string GetWhereClause<T>(Expression<Func<T, bool>> expression)
{
var name = expression.Parameters[0].ToString();
var body = expression.Body.ToString().Replace("\"", "'");
body = body.Replace("OrElse", "OR");
body = body.Replace("AndAlso", "AND");
body = body.Replace("==", "=");
body = body.Replace("!=", "<>");
body = body.Replace(string.Format("{0}.", name), "");
return body;
}
到目前爲止,這是很基本的,真正有趣的事情,但我不知道如何解決這個XDXD,任何建議或代碼?
你知道Linq2SQL和Linq2Entities這樣做嗎? – Magnus
不要'ToString'表達式樹,但*實際上完全處理*樹。 – poke
我不認爲你應該使用表達式樹的字符串表示。表達式樹的整個觀點是解析已經完成了,並且你得到了一棵樹。順便說一句,我認爲從表達式樹生成代碼是一項相當複雜的任務,而不是在下午要做的事情。 – Stilgar