2010-10-01 5 views
1

Можно ли применить предложение WHERE в запросе SubSonic?Subsonic Single WHERE clause

Например, я получаю получить один на основе ид ...

db.Single<Storage>(id); 

Но как я могу получить один основанный на простом ИНЕКЕ?

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

ответ

1

Спасибо за выше, это была помощь, и в конце концов я упростил это ниже ...

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

Да, не думал об этом;) Тем не менее с помощью дозвуковых 2, потому что я ограничивается рамкой 2.0. С нетерпением ждем, чтобы в ближайшем будущем миргреть. –

+0

@SchlaWiener: Не по теме, но, поскольку вы упомянули об этом, я скажу, что я не очень доволен SubSonic 3. Уверен, что синтаксис LINQ хорош, но он глючит, и когда поставщик LINQ не попадает в ошибка, она просто ограничена. Не говоря уже о том, что в шаблоном коде достаточно разрывать изменения, чтобы быть хлопот. Надеюсь, вы скоро сможете продвинуться в карьере, но не волнуйтесь за SS3, LOL. –

+0

Поскольку я использую mysql, который, вероятно, не так сильно проверен как сервер sql, я ожидаю найти некоторые ошибки. Но поскольку это открытый исходный код, я могу исправить его сам;) Функция killer для меня является дозвуковой в сочетании с режимом сервера XtraGrid и источником данных linq. Http://tv.devexpress.com/#XtraGridLinqServerMode У меня есть приложение для демонстрации, и это потрясающе , Я могу делать инкрементный поиск/сортировку и группировку на таблице с 200000 + записями, и это быстро. –

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>(); 
    } 
}