asp.net - простой ответ на вопрос - PullRequest
1 голос
/ 13 января 2011

Кто-нибудь знает, что я делаю неправильно, при получении данных из БД.

У меня есть следующий код

            var a = from p in db.test3s
                    where p.ID == '1'
                    select p.PostID;

            ViewData["a"] = a;

И в файле .aspx ViewData ["a"] показывает мне это:

SELECT [t0].[PostID] FROM [dbo].[test3] AS [t0] WHERE [t0].[ID] = @p0

... вместо (некоторого) целого числа.

Ответы [ 4 ]

4 голосов
/ 13 января 2011

Я не знаю, что такое ViewData, но вы должны знать, что запросы Linq to SQL не выполняются сразу после того, как вы присваиваете их какой-либо переменной.Это называется отложенной загрузкой, и это означает, что у вас будут ваши данные, когда вы будете пытаться работать с ними (например, когда вы будете пытаться перебрать результаты или sth).1003 *

var a = (from p in db.test3s
        where p.ID == '1'
        select p.PostID).First();

Это даст вам первый результат.Если вы хотите получить набор результатов, вы можете вызвать ToList (), ToArray () или что-то в этом роде.

3 голосов
/ 13 января 2011

Вам нужно перебрать результат, прежде чем значения станут доступными. Linq2Sql не знает, что ваш запрос вернет только одну строку (хотя вы можете это знать). Так что вы можете сделать это вместо:

ViewData["a"] = db.test3s.First(t => t.Id == 1).PostID;

, который будет гарантировать, что есть только один результат, и что значение PostID назначено вашим данным просмотра.

3 голосов
/ 13 января 2011

Попробуйте

if(a.Any())
   ViewData["a"] = a.First();
2 голосов
/ 13 января 2011

В вашем примере a имеет тип IQueryable<Int32>. Это like a list of items (но с отложенным исполнением). Вы должны извлечь конкретный элемент, используя некоторые селекторы: First(), FirstOrDefault(), Single(), SingleOrDefault() и т. Д. (Зависит от того, что вам нужно в конкретной ситуации)

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