/ / ASP.NET MVC 5 Join on Between, bez klucza podstawowego - asp.net, sql-server, asp.net-mvc, entity-framework, join

ASP.NET MVC 5 Join on Between, bez klucza podstawowego - asp.net, sql-server, asp.net-mvc, entity-framework, join

Mam interesujący kod do obejrzenia.

Mam trzy tabele:

TabelaPK

Identyfikator użytkownika

TableBFKID

Wynik

Tabela B ma 3 kolumny:

TabelaPK

Imię

Krótkie imię

Tabela c ma 4 kolumny:

TabelaPK

ScoreMin

ScoreMax

Modyfikator

Tak więc, gdy nastąpi pełne sprzężenie, wygląda to tak:

SELECT  B.ShortName
, A.Score
, C.Modifier
FROM TableA A
INNER JOIN TableB B ON a.TablePK= B.TablePK
INNER JOIN TableC C ON A.Score BETWEEN C.ScoreMin AND C.ScoreMax

Wyniki wyglądałyby tak:

ShortName, Score, Modifier. DAWNY:

CHA, 19, 4

Teraz wiem, jak wykonać Entity Framework, jeśli istnieje rzeczywisty PK lub FK, lub nawet jeśli istnieje tylko relacja 0: 1.

Ale jak to zrobić, gdy nie ma PK ani FK?

Odpowiedzi:

1 dla odpowiedzi № 1

LINQ, włączając LINQ do Entities, obsługuje tylko equi-joins.

Ale możesz uruchomić SQL bezpośrednio:

var res = myContext.Database.SqlQuery<TResult>("SQL goes here", parmeters...);

a EF zamapuje kolumny zestawu wyników na właściwości TResult (który potrzebuje innego połączenia z kontekstem: nie musi to być typ jednostki z a DbSet wpisana właściwość w kontekście).


1 dla odpowiedzi nr 2

W tym przypadku nie próbowałbym się do nich przyłączyć, wystarczy użyć podrzędnego wyboru w linq, aby wybrać z niezintegrowanej tabeli, gdzie wyniki znajdują się pomiędzy pożądanymi zakresami.

var results = context.TableA
.Select(a => new  {
score = a.Score, //add all needed columns
tableCs = context.TableC.Where(c => a.Score >= c.ScoreMin && a.Score <= c.ScoreMax)
});