2016-07-17 3 views
0

Я пытаюсь получить данные для конкретного округа ID с помощью о LINQ, запрос в SQL выглядит следующим образом:три уровня выбирают оператор в 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)) 

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

другой SQL путь:

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 

спасибо и наилучшие пожелания

+0

Почему бы не использовать соединение с таблицами вместо внутренних запросов с помощью? – Hakunamatata

+0

Я пытаюсь сделать это простым, я могу сделать это на SQL, но я не уверен, что это можно сделать в судебном порядке LINQ – HAJJAJ

+0

@Hakunamatata Только что обновил вопрос :) – HAJJAJ

ответ

2

Поскольку это Entity Framework, вы можете значительно упростить задачи запроса данных (особенно если вы новичок в LINQ) и в основном забываете о объединениях, если описываете свои отношения данных, используя так называемый navigation properties.

После того, как вы их, запрос, как один, если бы вопрос прост, как:

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

(конечно, вы можете добавить Select, если вы хотите получить только определенные поля).

1

Вы могли так что-то, как показано ниже, который преобразует внутренний запрос в 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)) 

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 
      }; 

Надеется, что это помогает!

Смежные вопросы