2010-10-01 48 views
1

是否可以在SubSonic查詢上應用WHERE子句?亞音速單個WHERE子句

例如,我得到得到一個單一的基於ID ...

db.Single<Storage>(id); 

但我怎麼能得到一個基於一個簡單的WHERE子句?

db.Single<Storage>(WHERE columnname == "value"); 

回答

1

感謝以上,這是一個幫助,最終我簡化這下面...

 db.Single<Storage>(s => s.ColumnName == "value"); 
+0

呀,沒想到有關;還採用亞音速2,因爲我)限於框架2.0。期待在不久的將來發生反應。 – 2010-10-01 20:07:34

+0

@SchlaWiener:偏離主題,但自從你提到它之後,我會說我對SubSonic 3並不滿意。確保LINQ語法很好,但是它有問題,並且當LINQ提供程序沒有打到錯誤,它只是普通的限制。更不用說模板化代碼中有足夠的突破性變化成爲一個麻煩。我希望你可以儘快在框架中上升,但不要太過興奮SS3,哈哈。 – 2010-10-01 20:19:10

+0

由於我使用的mysql可能不像sql server那麼多,我預計會發現一些bug。但是由於它是開源的,我可以自己修復它;)對於我來說,殺手功能是亞音速結合XtraGrid的服務器模式和linq數據源http://tv.devexpress.com/#XtraGridLinqServerMode我有一個演示應用程序正在運行,它很棒。我可以進行增量搜索/排序和分組在200000 +記錄表上,它的速度非常快。 – 2010-10-01 23:50:46

1

這是可能的:

// Will return a Storage instance with property IsNew = true, if record does not exist 
// since an object created with new never can be null 
var storage1 = new Storage(1); // id = 1 
var storage1 = new Storage(Storag.Columns.ColumnName, "value"); 

// Will return 0 if record not found (subsonic3 only) 
var storage3 = (from s in Storage 
       where s.ColumnName == "value" 
       select s).SingleOrDefault(); 

// Will throw an exception if record not found (subsonic3 only) 
var storage3 = (from s in Storage 
       where s.ColumnName == "value" 
       select s).Single(); 

由於分貝是局部類,你可以擴展它。只需在同一名稱空間內創建一個新文件(但解決方案中的另一個文件夾)即可。這適用於亞音速2,但與亞音速3相似,我認爲。

public static partial class DB 
{ 
    public static T Single<T>(String columName, Object columnValue) where T: RecordBase<T>, new() 
    { 
     return Select().From<T>() 
         .Where(columnName).IsEqualTo(columnValue) 
         .ExecuteSingle<T>(); 
    } 
}