Linq bug?
От: Ziaw Россия  
Дата: 02.06.10 08:42
Оценка: 58 (1)
Не могу понять где баг — в Nemerle.Data.Linq или BLToolkit.

Прходит простой такой тест:
   using (db = Db())
   {
        def id1 = System.Guid("005B55CD-C6E9-433F-8983-74E53465714E");
        def id2 = System.Guid("7017AC86-450E-4B0D-987C-844B4EF7ACBA");

        def single1 = db.Pages.Single(t => t.Id == id1);
        def single2 = db.Pages.Single(t => t.Id == id2);

        Expect(single1.Id == single2.Id); // == 005B55CD-C6E9-433F-8983-74E53465714E
   }


Структура базы не имеет значения кроме того, что Id имеет тип Guid.

Фишка в том, что тулкит кеширует экспрешены. В C# id1 и id2 превращаются в замыкания. В немерле в константы. Тулкит по каким-то своим причинам не различает константы типа Guid (IsConstant для Guid возвращает false). Поэтому он считает экспрешены эквивалентными и использует запрос сгенеренный для первой выборки во второй.

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