Зачем тянуть блоб на клиента если нужно на null проверить?
От: Jack128  
Дата: 13.10.10 13:06
Оценка:
база FB

        [TableName("GSD_VERSIONS")]
        public class Rec
        {
            public long Id;
            [MapField("DATA_V3")]
            public byte[] DataV3;
        }


            using (var db = new DbManager())
            {
                var _ = db.GetTable<Rec>()   
                    .Select(rec => new 
                    {                        
                        DataExist = rec.DataV3 != null,                        
                    }).ToList();
            }


генериуется запрос :

SELECT
rec.DATA_V3 as DataV3
FROM
GSD_VERSIONS rec

естественно при больших блобах такой запрос тормозит нереально.

в FirebirdSqlProvider.cs видно, были попытки реализовать такой запрос через case when .. else .. end (см protected override void BuildColumn(StringBuilder sb, SqlQuery.Column col, ref bool addAlias) ...) но походу что то где то поломалось..
Re: Зачем тянуть блоб на клиента если нужно на null проверит
От: IT Россия linq2db.com
Дата: 13.10.10 13:14
Оценка:
Здравствуйте, Jack128, Вы писали:

J>
J>        [TableName("GSD_VERSIONS")]
J>        public class Rec
J>        {
J>            public long Id;
J>            [MapField("DATA_V3")]
J>            public byte[] DataV3;
J>        }


J>            using (var db = new DbManager())
J>            {
J>                var _ = db.GetTable<Rec>()   
J>                    .Select(rec => new 
J>                    {                        
J>                        DataExist = Sql.AsSql(rec.DataV3 != null),                        
J>                    }).ToList();
J>            }

J>


А так?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Зачем тянуть блоб на клиента если нужно на null прове
От: Jack128  
Дата: 13.10.10 13:34
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Jack128, Вы писали:


J>>

J>>            using (var db = new DbManager())
J>>            {
J>>                var _ = db.GetTable<Rec>()   
J>>                    .Select(rec => new 
J>>                    {                        
J>>                        DataExist = Sql.AsSql(rec.DataV3 != null),                        
J>>                    }).ToList();
J>>            }

J>>


IT>А так?



SELECT
    (rec.DATA_V3 IS NOT NULL) as c1
FROM
    GSD_VERSIONS rec


соответственно сервер отлут дает..
Re[3]: Зачем тянуть блоб на клиента если нужно на null прове
От: IT Россия linq2db.com
Дата: 13.10.10 13:41
Оценка:
Здравствуйте, Jack128, Вы писали:

J>>>
J>>>            using (var db = new DbManager())
J>>>            {
J>>>                var _ = db.GetTable<Rec>()   
J>>>                    .Select(rec => new 
J>>>                    {                        
J>>>                        DataExist = Sql.AsSql(rec.DataV3 == null ? false : true),                        
J>>>                    }).ToList();
J>>>            }
J>>>


А так?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Зачем тянуть блоб на клиента если нужно на null прове
От: Jack128  
Дата: 13.10.10 13:43
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Jack128, Вы писали:


J>>>>
J>>>>            using (var db = new DbManager())
J>>>>            {
J>>>>                var _ = db.GetTable<Rec>()   
J>>>>                    .Select(rec => new 
J>>>>                    {                        
J>>>>                        DataExist = Sql.AsSql(rec.DataV3 == null ? false : true),                        
J>>>>                    }).ToList();
J>>>>            }
J>>>>


IT>А так?


о. Так работает. Сенкс.
Re[5]: Зачем тянуть блоб на клиента если нужно на null прове
От: Jack128  
Дата: 13.10.10 13:53
Оценка:
Здравствуйте, Jack128, Вы писали:

J>о. Так работает. Сенкс.


Тогда такой вопрос:

то что Sql.AsSql(rec.Data != null) — не работает — это насколько я понимаю чистая бага.

А вот то, что вообще Sql.AsSql нужен — это как?? by design ?

А статье "Linq-провайдер для BLToolkit" при описании SqlFunction/Sql.AsSql и параметра ServerSideOnly написано:

Последний параметр нуждается в особом объяснении. Дело в том, что BLToolkit пытается минимизировать нагрузку на сервер БД и при возможности переложить выполнение определённых функций на клиента. Но это поведение не всегда бывает полезно. Если SQL функция отмечена флагом ServerSideOnly, то функция в любом случае транслируется в SQL.


но насколько я понимаю — мой случай не про это..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.