Linq: не до конца получилось сделать mapping на объект.
От: TheWind3 Россия  
Дата: 27.05.11 08:50
Оценка:
Доброго времени суток всем.

0. Я сейчас выбираю архитектурное решение для большого проекта, и рассматриваю различные ORM. BLT произвел на меня сильное впечатление — не часто встретишь такую хорошую, продуманную вещь. Огромный респект разработчику(-кам).

1. Хоть я и читал документации и изучал примеры и исходники — я во многом не успел разобраться за короткий срок. Так что прошу прощения за возможно глупые вопросы.

2. У меня не до конца получилось сделать mapping полей таблицы на объект:

База данных:
create table Bill (
  Id_Value            Int,
  Id_Description      Int,
  Comment_Value       Varchar(255),
  Comment_Description Varchar(255),
  Sum_Value           Int,
  Sum_Description     Varchar(255)
)
insert into Bill (Id_Value, Comment_Value, Comment_Description) values (1, 'B1', 'Это B1')
insert into Bill (Id_Value, Comment_Value, Comment_Description) values (2, 'B2', 'Это B2')


Прикладной код:
public class Field<T> {
  public T      Value;
  public string Description;
}

[TableName(Name = "Bill")]
public class Bill {
  [PrimaryKey]
  [MapField(Format = "Id_{0}")]
  public Field<int> Id = new Field<int>();

  [MapField(Format = "Comment_{0}")]
  public Field<string> Comment = new Field<string>();

  [MapField(Format = "Sum_{0}")]
  public Field<int> Sum = new Field<int>();
}

public class TestDB: DbManager {
  public Table<Bill> Bill { get { return GetTable<Bill>(); } }
}

static void Main(string[] args) {
  using(TestDB Db = new TestDB()) {
    var Q = from B in Db.Bill select B.Comment;
    foreach(var F in Q)
      Console.WriteLine(F.Value + "--" + F.Description);
  }
}


SQL, сгенерированный BLT:
SELECT
    [B].[Id_Value],
    [B].[Comment_Value],
    [B].[Comment_Description],
    [B].[Sum_Value],
    [B].[Sum_Description]
FROM
    [Bill] [B]


Что не устраивает:
Не устраивает, что sql-запрос выбирает ВСЕ поля из таблицы Bill, хотя достаточно только полей Comment_Value и Comment_Description.
В случае же следующего linq-запроса:
var Q = from B in Db.Bill select new {B.Comment, B.Description};

... все проходит чудесно, отбираются только нужные поля.

Вопрос:
Как в моем случае "заставить" BLT отбирать только нужные поля ?

Вопрос не праздный, ибо планируется, что таблица (в моем примере Bill) будет иметь довольно много полей, и не хотелось бы терять на этом производительность.

3. Заранее спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.