Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq-to-Sql проблема преобразования типов / 7 сообщений из 7, страница 1 из 1
09.10.2009, 14:46
    #36242270
_Varcom_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
Здравствуйте!

Выполняю простейший join по вторичному ключу в стиле:

Код: plaintext
var res = from insA in instancesA where insA.FId == instancesB.Id select insA.Data;

Поля FId и Id прописаны в базе как numeric(19,0). Я же использую для них CLR тип decimal:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
//[ID] [numeric](19, 0) IDENTITY(1,1) NOT NULL,
        private decimal _id;

        [Column(Name = "ID", Storage="_id", IsDbGenerated = true, IsPrimaryKey = true)]
        public decimal Id
        {
            get { return _id; }
            set { _id = value; }
        }

При выполенении запроса выскакивает ошибка "не могу преобразовать insA.FId в SQL"
Хотя по логике вещей должно прокатывать: http://msdn.microsoft.com/ru-ru/library/bb386947.aspx

Как выйти из положения?
...
Рейтинг: 0 / 0
09.10.2009, 16:33
    #36242643
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
_Varcom_,

что такое instancesA и instancesB? пример неполон.
и почему бы не воспользоватьс готовым маппингом по FK?
например,
Код: plaintext
var res = db.Table.InstanceB.InstancesA.Select(p=>p.Data);
...
Рейтинг: 0 / 0
09.10.2009, 16:34
    #36242650
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
наврал немного с примером,

Код: plaintext
var res = instanceB.InstancesA.Select(p=>p.Data);
при учете что instanceB уже найден.
...
Рейтинг: 0 / 0
11.10.2009, 17:51
    #36244411
_Varcom_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
Извиняюсь, если не точно выразился.
instancesB - это главный объект, экземпляр которого у меня есть.
Табличка instancesA хранит связи объектов типа instancesB с различными данными.
Поэтому нужно для данного instancesB.Id вытащить все относящиеся к нему наборы данных из instancesA.
instancesA.Fid - это и есть вторичный ключ, указывающий на головной объект.

Поэтому маппингом по FK пользовать не могу, ибо нужно обратное преобразование - по имеющемуся первичному ключю найти все ссылающиеся на него вторичные.
...
Рейтинг: 0 / 0
11.10.2009, 18:13
    #36244433
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
тогда что такое в твоем коде "instancesA" ? выкладывай достаточные примеры, не заставляй людей лишний раз думать и писать вопросы.
...
Рейтинг: 0 / 0
11.10.2009, 18:29
    #36244448
_Varcom_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
ОК. Более подробно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
InstanceBType InstanceB;
DataContext db = new DataContext(LocalConfiguration.ConnectionString);
Table<InstanceAType> instancesA = db.GetTable<InstanceAType>();
var result = from insA in  instancesA where (InstanceB.Id == insA.FId) select insA.Data;
...
return result.ToList();



    [Table(Name = "...")]
    public class InstanceBType
    {

        //[ID] [numeric](19, 0) IDENTITY(1,1) NOT NULL,        
        private decimal _id;

        [Column(Name = "ID", Storage = "_id", DbType = "numeric(19,0)", IsPrimaryKey = true, IsDbGenerated = true, CanBeNull=false)]
        public decimal  Id
        {
            get { return _id; }
            set { _id = value; }
        }
        ...
   }

    public class InstanceAType
    {
           //[F_ID] [numeric](19, 0) NULL,
        private decimal _fId;

        [Column(Name = "F_ID", Storage = "_fId")]
        public decimal FId
        {
            get { return _fId; }
            set { _fId = value; }
        }

        private EntityRef< InstanceBType> _f;

        [Association(Name = "F_ID", IsForeignKey = true, ThisKey = "FId", Storage = "_f")]
        public InstanceBType Data
        {
            get { return _f.Entity; }
            set { _f.Entity = value; }
        }
        ...
   }
...
Рейтинг: 0 / 0
11.10.2009, 21:25
    #36244555
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq-to-Sql проблема преобразования типов
так, чувствую через сообщение мне надоест сюда писать

Код: plaintext
1.
2.
3.
InstanceBType InstanceB;
DataContext db = new DataContext(LocalConfiguration.ConnectionString);
Table<InstanceAType> instancesA = db.GetTable<InstanceAType>();
var result = from insA in  instancesA where (InstanceB.Id == insA.FId) select insA.Data;
если это реальные 4 строчки именно в такой последовательности и ничего больше, то.... как ты используешь в запросе неинициализированный InstanceB?

да и маппинг у тебя кривой какой-то, ты его руками что-ли наклепал? почему было не воспользоваться дизайнером? вместе с кривым маппингом сам по себе запрос вообще выглядит крайне бредово.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq-to-Sql проблема преобразования типов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]