база 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) ...) но походу что то где то поломалось..
Здравствуйте, 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>
А так?
Здравствуйте, 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
соответственно сервер отлут дает..
Здравствуйте, 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, Вы писали:
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>А так?
о. Так работает. Сенкс.
Здравствуйте, Jack128, Вы писали:
J>о. Так работает. Сенкс.
Тогда такой вопрос:
то что Sql.AsSql(rec.Data != null) — не работает — это насколько я понимаю чистая бага.
А вот то, что вообще Sql.AsSql нужен — это как?? by design ?
А статье "Linq-провайдер для BLToolkit" при описании SqlFunction/Sql.AsSql и параметра ServerSideOnly написано:
Последний параметр нуждается в особом объяснении. Дело в том, что BLToolkit пытается минимизировать нагрузку на сервер БД и при возможности переложить выполнение определённых функций на клиента. Но это поведение не всегда бывает полезно. Если SQL функция отмечена флагом ServerSideOnly, то функция в любом случае транслируется в SQL.
но насколько я понимаю — мой случай не про это..