Может ли LINQ To SQL определить, где разрывается связь таблиц? - PullRequest
4 голосов
/ 29 июля 2010

У меня есть две таблицы, которые я использую для заполнения сетки. Таблицы имеют общее поле с именем RangeActivityID. Моя проблема в том, что база данных очень старая, и некоторые из более старых записей не совпадают идентификаторы между таблицами, поэтому я не могу добавить связь между ними в базе данных.

Мне все равно о старых данных, которые не совпадают, поэтому в моем файле .dbml я вручную создал ассоциацию, чтобы выбрать хорошие данные из обеих таблиц. У меня есть запрос LINQ:

var collective = from p in rangeConnection.RangeActivities
                            orderby p.RangeActivityID
                            select new
                            {
                                TestName = p.TestName,
                                DateTime = p.ActivityDateTime,
                                Notes = p.Notes,
                                //RoundSerialNumber = p.RoundFire.RoundSerialNumber,
                                //RoundType = p.RoundFire.RoundType,
                                //LotStockNumber = p.RoundFire.LotNumber
                            };

Я могу установить для своего источника данных сетки значение «коллективный», и все работает, но если я раскомментирую три закомментированные строки, запрос не даст результатов, поскольку в таблицах есть данные, которые не соответствуют критериям ассоциации. Есть ли способ заставить запрос LINQ игнорировать результаты, которые не совпадают?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Попробуйте добавить where p.RoundFire != null критерий.

1 голос
/ 29 июля 2010

Вместо этого предложите join и эмулируйте SQL LEFT JOIN.

 var q = from p in rangeConnection.RangeActivities
            join r in rangeConnection.RoundFires
               on p.RangeActivityID equals r.RangeActivityID into sr
            from x in sr.DefaultIfEmpty()
             select new
                        {
                            TestName = p.TestName,
                            DateTime = p.ActivityDateTime,
                            Notes = p.Notes,
                            RoundSerialNumber = x.RoundSerialNumber,
                            RoundType = x.RoundType,
                            LotStockNumber = x.LotNumber
                            //consider checking for string.IsNullOrEmpty() 
                            //for the RoundFires properties
                        };

Синтаксис для ваших сущностей может быть неточным, но, пожалуйста, измените мой ответ, если он поможет вам найти решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...