Получите данные привязки из StoredProcedure с помощью Join, LINQ, а затем Split.используя IMultipleResults, Linq2SQL - PullRequest
6 голосов
/ 15 октября 2010

У меня есть приложение, в котором я использую хранимую процедуру и LINQ.Моя процедура выглядит следующим образом:

myProc

select col1, Col2, Col3 from Tab1 inner join Tab2 on col1=ColA  join tab3 on Col1=ColD

Select cola, Colb, Colc from Taba inner join Tabb on cola=ColX  join tabc on Cola=ColY

Select colP, ColQ, ColR from TabP inner join TabQ on colP=ColW  join tabR on ColP=ColZ

Я выполняю эту хранимую процедуру в LINQ.Когда я выполняю его, я получаю результаты в IMultipleResults.

Ниже приведен мой код в LINQ:

[Function(Name = "dbo.MyProc")]
[ResultType(typeof(TabA))]
[ResultType(typeof(TabB))] .....
public IMultipleResults GetMultipleResults([Parameter(DbType = "VarChar(50)")] string i_Cola)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), i_Cola);
    return (IMultipleResults)result.ReturnValue;
}

Когда я выполняю его следующим образом:

MyContext mCtx = new MyContext()
var allResult = mCtx.GetMultipleResults(txtName.Text.Trim());
IEnumerable<Taba> TabaRes = allResult.GetResult<Taba>();
IEnumerable<TabB> TabbRes = allResult.GetResult<Tabb>();

Я получаю значения столбцов таблиц, но мне также нужны столбцы Inner Joined.Я ссылался на многие блоги и форумы, такие как ...

  1. Блог Бена Холла
  2. Блог Гая Бурштейна
  3. Блог Microsoft

... чтобы попытаться найти решение моей проблемы, но не смог найти.

Ответы [ 4 ]

2 голосов
/ 25 декабря 2010

гораздо лучше использовать представления в отношении SP (если вы не можете написать запрос linq to sql), если вы используете Linq для Sql, то его ценность - использовать Sp, потому что это снижает производительность. И еще одна вещь, еслиВы используете Linq to sql. Нет необходимости использовать любой тип соединения, если база данных полностью нормализована.Если проблема не решена, просто покажите мне структуру таблицы и что вам нужно, я напишу запрос для вас ...

0 голосов
/ 09 ноября 2010

Я не уверен, что понимаю вашу потребность, но можете ли вы изменить процедуру для возврата * или всех столбцов во всех нужных вам таблицах?

0 голосов
/ 26 ноября 2010

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

Это в основном сводит на нет смысл наличия хранимой процедуры ибыть медленнее, чем просто добавить необходимые параметры в хранимую процедуру.

0 голосов
/ 25 октября 2010

Возможно, это был бы глупый вопрос, но в вашей процедуре магазина:

select col1, Col2, Col3 from Tab1
inner join Tab2 on col1=ColA  join
tab3 on Col1=ColD

col1,col2,col3 все из tab1, но вы никогда не набирали select из других таблиц, которые пытаетесь сделать inner join. Вы пробовали

select col1,col2,col3,colA,colB...  

-или-

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