2016-06-27 4 views
0

Я создаю IQueryable<int> и в зависимости от того, какие критерии выбирает пользователь, псевдоним столбца int в сгенерированном SQL может отличаться. Иногда это имя столбца, и иногда это что-то вроде «C1». Как и мой вопрос здесь, где я спрашиваю How can I get the parameters of an Entity Framework query?, мне интересно, есть ли способ получить сгенерированное имя псевдонима запроса?Как я могу получить псевдонимы столбцов, созданные Entity Framework?

ответ

0

Это не напрямую Ответьте на мой вопрос, но я только что узнал об удивительном трюке, который позволяет мне переопределить, что такое псевдоним (в SQL Server), и мне пришлось делиться им.

var query = myIQueryable.ToString(); 
var sql = [email protected]"SELECT x.myAlias 
      FROM ({query}) x(myAlias)"; 

Теперь я могу объединить мой супер-комплекс IQueryable с этим небольшим фрагментом SQL, чтобы сделать объемные вставки и обновление операций. Такие, как:

var query = myIQueryable.ToString(); 
var sql = [email protected]"INSERT INTO dbo.myTable (col1) 
      SELECT x.myAlias 
      FROM ({query}) x(myAlias)"; 

Или

var query = myIQueryable.ToString(); 
var sql = [email protected]"UPDATE dbo.myTable 
      SET Col1 = 1 
      FROM dbo.myTable 
      JOIN ({query}) x(myAlias) ON x.myAlias = dbo.myTable.SomeColumn"; 

Конечно, вам все равно придется подключить параметры запроса, которые вы можете получить, следуя примеру, приведенный на мой предыдущий вопрос: How can I get the parameters of an Entity Framework query?