2010-10-15 4 views
6

Ich habe eine Anwendung, in der ich eine gespeicherte Prozedur und LINQ verwenden. Mein Verfahren sieht wie folgt aus:Fetch n binden Daten von StoredProcedure mit Join, LINQ, dann Split. Verwenden von IMultipleResults, Linq2SQL

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 

ich diese gespeicherte Prozedur in LINQ bin ausgeführt wird. Wenn ich es ausführe, bekomme ich die Ergebnisse in IMultipleResults.

Unten ist mein Code in 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; 
} 

Wenn ich es wie folgt ausführen:

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

Ich bin die Spaltenwerte der Tabellen bekommen, aber ich möchte das Innere auch Spalten beigetreten. Ich war schon in vielen Blogs und Foren genannt, wie ...

  1. Ben Hall's Blog
  2. Guy Burstein's Blog
  3. Microsoft's Blog

... zu versuchen, eine Lösung für mein Problem zu finden, aber konnte keine finden.

Antwort

0

Vielleicht wäre dies eine dumme Frage, aber in Ihrem Geschäft vor:

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

col1,col2,col3 alle von tab1 sind, aber man kann nie eine select von den anderen Tabellen haben, die Sie zu tun inner join versuchen. Haben Sie versucht,

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

-oder

select * from... 
+0

Sind Sie verrückt .......... fragte ich nach einer Lösung in linq die ll löse mein Problem nicht gefragt –

+3

Kein Grund, so nervös und beleidigend darüber zu sein! Vielleicht habe ich dich nicht verstanden. Könnten Sie das näher ausführen? Möchten Sie, dass Ihre Store-Prozedur in LINQ oder .... neu geschrieben wird? Bitte erklären Sie es. –

+4

@Umakanta seine sehr schlechte Form, um unhöflich zu Menschen zu sein, die versuchen, Ihnen zu helfen.Außerdem war Ihre Frage nicht genau klar und könnte eine vernünftige Person verwirren. – Will

0

Ich bin nicht sicher, ob ich Ihre Notwendigkeit verstehen, aber können Sie die proc ändern zurückzukehren * oder alle Spalten in allen Tabellen, die Sie brauchen?

+0

NEIN I Es wird meine Leistung verringern und es gibt Joins und daher brauche ich einige bestimmte Spalten, um –

+0

zurückzugeben. So benennen Sie alle Spalten, die Sie benötigen, das, was ich mit "oder allen Spalten in allen Tabellen, die Sie benötigen" – Oakcool

+1

Dies wird Ihre Leistung nicht verlangsamen, es würde sicherlich die Leistung verlangsamen, wenn Sie eine andere Abfrage benötigen. – Oakcool

0

Wenn die gespeicherte Prozedur die erforderlichen Daten nicht zurückgibt, besteht die einzige Option für LINQ darin, die Datenbank erneut selbst abzufragen.

Dies würde den Punkt, eine gespeicherte Prozedur zu haben, größtenteils negieren und langsamer sein, als nur die erforderlichen Parameter zu Ihrer gespeicherten Prozedur hinzuzufügen.

2

gut besser, Ansichten in Bezug auf SP zu verwenden (Wenn Sie eine Linq zu SQL-Abfrage nicht schreiben können), wenn Sie Linq zu SQL verwenden, ist es wert, Sp zu verwenden, verringern Sie die Leistung.und eine weitere Sache Wenn Sie Linq zu SQL verwenden, müssen Sie keine Art von Join verwenden, wenn Ihre Datenbank vollständig normalisiert ist. Wenn immer noch Ihr Problem nicht gelöst ist, zeigen Sie mir einfach die Tabellenstruktur und was Sie brauchen, ich schreibe eine Abfrage für ...

+0

+1 obwohl es schrecklich formuliert ist, ist es die richtige Antwort – HAL9000