2016-07-17 12 views
0

Ich versuche, Daten für einen bestimmten Kreis ID, in SQL die Abfrage sieht wie folgt mit LINQ-Anweisung zu erhalten:drei Ebenen SELECT-Anweisung in LINQ?

Select Ads_ComputersID, AdTitle, AdDesc, CityID, CategoryID, Price 
From [dbo].[Ads_Computers] where CityID in (Select CityID from [dbo].[Cities] where [StateID] in (select StateID from [dbo].[States] where CountryID=10)) 

da ich LINQ können Sie mir bitte noch neu bin helfen, dies zu erreichen, und Was ist besser, LINQ oder gespeicherte Prozedur mit Datensätzen zu verwenden?

ein anderer SQL-Weg:

SELECT A.Ads_ComputersID, A.AdTitle, A.AdDesc, A.CityID, A.CategoryID, A.Price 
FROM [dbo].[Ads_Computers] A 
LEFT JOIN [dbo].[Cities] C ON A.CityID=C.CityID 
LEFT JOIN [dbo].[States] S ON S.StateID = C.StateID 
WHERE S.CountryID=10 

Dank und mit freundlichen Grüßen

+0

Warum verwenden Sie nicht Join mit Tabellen anstelle von inneren Abfragen mit in? – Hakunamatata

+0

Ich versuche, es einfach zu machen, ich kann es auf SQL machen, aber ich bin mir nicht sicher, ob es LINQ – HAJJAJ

+0

@Hakunamatata verklagt werden kann Just updated die Frage :) – HAJJAJ

Antwort

2

Da dies Entity Framework ist, können Sie Ihre Datenabfrage-Tasks viel einfacher machen (besonders, wenn Sie neu bei LINQ sind) und grundsätzlich die Joins vergessen, wenn Sie Ihre Datenbeziehungen mit dem sogenannten navigation properties beschreiben.

Sobald Sie sie haben, eine Abfrage wie die, wenn Frage so einfach wäre:

var query = db.Ads_Computers.Where(c => c.City.State.Country.CountryID == 10); 

(natürlich können Sie Select hinzufügen, wenn Sie nur bestimmte Felder erhalten möchten).

1

Man könnte so etwas wie, unter dem konvertiert innere Abfrage in LINQ.

Hinweis: Ich habe es nicht getestet, damit es Fehler geben kann.

Select Ads_ComputersID, AdTitle, AdDesc, CityID, CategoryID, Price 
From [dbo].[Ads_Computers] 
where CityID in (Select CityID from [dbo].[Cities] where [StateID] in (select StateID from [dbo].[States] where CountryID=10)) 

LINQ

var innermostQuery = from s in db.States where s.CountryID = 10 select s.CityId; 
var innerQuery = from c in db.Cities where innemostQuery.Contains(c.StateId) select c.CityID; 

var result = from x in db.Ads_Computers where innerQuery.ToList().Contains(x.CityIS) select x; 
1
var query = from d in entities.Ads_Computers 
      from c in entities.Cities.Where(cid => cid.CityID == d.CityID).DefaultIfEmpty() 
      from s in entities.States.Where(st => st.StateID == c.StateID).DefaultIfEmpty() 
      where st.CountryID = 10 
      select new 
      { 
       d.Ads_ComputersID, 
       d.AdTitle, 
       d.AdDesc, 
       d.CityID, 
       d.CategoryID, 
       d.Price 
      }; 

hoffe, das hilft!

Verwandte Themen