測試:
1)實體類,這個類沒有采用元數據匹配的方式,而是采用專門的類來存儲Map信息,主要是為了進行表達式書寫
[csharp]
public class TestEntity
{
private static readonly TableInfo _TableInfo = new TableInfo(){ TableName="EEEE"};
public static TableInfo TableInfo
{
get
{
return _TableInfo;
}
}
private static readonly FieldInfo _Id = new FieldInfo() { FieldName = "id" };
public static FieldInfo Id
{
get { return TestEntity._Id; }
}
private static readonly FieldInfo _Name = new FieldInfo() { FieldName = "Name" };
public static FieldInfo Name
{
get { return TestEntity._Name; }
}
}
2)測試類
[csharp]
public class TestExp
{
public static string Test()
{
DbExpression theQuery = new DbExpression();
theQuery.Select(AliasExp.T1[TestEntity.Id], AliasExp.T1[TestEntity.Name])
.From(AliasExp.T1[TestEntity.TableInfo])
.Where(AliasExp.T1[TestEntity.Id] > ConstExp<int>.C("Name", 100));
return theQuery.Expression;
}
}
www.2cto.com 上面的表達式和參數就直接可以給Command來執行,我只做了select,其實Update,Delete表達式都是可以的。當然,如果繼續重載操作符,可以把常量表達式除掉,可以像一般書寫那種方式來書寫,比如:A>100,A="100".這裡采用了偷懶的方式。當然要完全模擬還是有困難,因此表達式也需要保留直接寫SQL和設置參數的功能。
這種表達式的優點是跟寫SQL類似,但全部針對實體,可以保持一致性,而且還可以借助VS的智能提示和語法檢查功能。缺點是不太純粹,性能上也會有損失。
輸出結果,大家可以自己動手運行來看.
PS:CSDN的這個編輯器有點問題,稍微久點(1分鐘不到)就不能保存了.
PS:希望C#能支持自定義操作符號,這樣就可以模擬出更純粹的表達式.
摘自 hawksoft