2012-04-23 2 views
2

В настоящее время я использую EF Code-First, и мне хотелось бы получить SELECT данные из многих таблиц в базе данных. Этот запрос является настраиваемым запросом, и, следовательно, я не могу предсказать, какие данные я буду извлекать.Извлечение всех значений в виде строк из SQL Server

Сначала, когда я попробовал запустить ctx.Database.SqlQuery<string>(sql, param), я столкнулся с исключением, столкнувшись с DateTime значением. Я бы хотел сделать это, не отбрасывая его на стороне сервера.

Есть ли у кого-нибудь идеи, как я могу это сделать? Он может быть в LINQ, LINQ-SQL или просто SQL - до тех пор, пока он выполняет свою работу! Спасибо, ребята ...

ответ

1

Вы не получите его. Linq-to-entity не будет преобразовывать список строк. Ваш лучший шанс - выполнять обычные запросы и конвертировать и преобразовывать ваше приложение.

Аргумент о том, что вы не знаете, какие пользователи выбирают, просто означает, что вам нужно больше динамического решения. Linq-to-entity не является хорошим инструментом для вас (кроме случаев, когда вы пытаетесь использовать динамические Linq или строить деревья выражений вручную) , Используйте ESQL или SQL напрямую.

+0

Не лучшее решение, я знаю, но я следил за тем, что вы сделали, и добавил конвертировать (nvarchar (500),) в каждое значение, и это сработало чудеса. Благодаря! :) – matt

0

При выборе данных из нескольких таблиц, используйте anonymous types инкапсулировать свойства (поля), вы хотите, чтобы выбрать из этих таблиц в новое юридическое лицо, что-то вроде:

var query = _db.Categories.Join(
_db.Products, 
c => c.CategoryId, 
p => p.CategoryId, 
(category, product) => 
    new 
    { 
     ProductName = product.Name, 
     CategoryName = category.Name, 
     ExpiryDate = product.ExpiryDate 
    }); 
+0

Я действительно не знаю, что я получаю от запроса; это зависит от пользователя. Это означает, что иногда это может быть SELECT [Product]. [Product] [Name], а в другое время SELECT [Product]. [ExpiryDate]. Я просто хотел бы получить список из запроса. Спасибо – matt

0

Вы можете достичь строковые значения путем ввода полей данных в строку следующим образом:

var query = _db.Categories.Join(
_db.Products, 
c => c.CategoryId, 
p => p.CategoryId, 
(category, product) => 
    new 
    { 
     ProductName = product.Name.toString(), 
     CategoryName = category.Name.toString(), 
     ExpiryDate = product.ExpiryDate.toString() 
    }); 
+0

Я не знаю, что я получаю от запроса; это зависит от пользователя. Это означает, что иногда это может быть SELECT [Product]. [Product] [Name], а в другое время SELECT [Product]. [ExpiryDate]. Я просто хотел бы получить список из запроса. Спасибо – matt

Смежные вопросы