2010-09-17 2 views
1

У меня есть вопрос для начинающих LINQ2SQL. У меня есть этот огромный (но не сложный) заявление SQL:Преобразование SQL-запроса в LINQ

SELECT Artikel.ArtikelID, 
     Artikel.CategorieID, 
     Artikel.ImageFile, 
     Artikel.RetailPrijs, 
     ISNULL(ShopArtikel.VerkoopsPrijs, Artikel.VerkoopsPrijs) AS VerkoopsPrijs, 
     Artikel.ArtikelCode, 
     Artikel.InAssortimentSinds, 
     ArtikelTaal.ArtikelNaam, 
     ArtikelTaal.ArtikelOmschrijving 
FROM Artikel 
INNER JOIN ArtikelTaal ON Artikel.ArtikelID = ArtikelTaal.ArtikelID 
INNER JOIN ShopArtikel ON Artikel.ArtikelID = ShopArtikel.ArtikelID 
INNER JOIN Categorie ON Artikel.CategorieID = Categorie.CategorieID 
INNER JOIN CategorieTaal ON Categorie.CategorieID = CategorieTaal.CategorieID 
INNER JOIN Shop ON ShopArtikel.ShopId = Shop.ShopID 
INNER JOIN CategorieGroepShop ON Shop.ShopID = CategorieGroepShop.ShopId 
INNER JOIN Taal ON ArtikelTaal.TaalCode = Taal.TaalCode AND CategorieTaal.TaalCode = Taal.TaalCode 
INNER JOIN CategorieGroepTaal ON Taal.TaalCode = CategorieGroepTaal.TaalCode AND CategorieGroepShop.CategorieGroepId = CategorieGroepTaal.CategorieGroepID 
INNER JOIN CategorieGroep ON Categorie.CategorieGroepID = CategorieGroep.CategorieGroepID AND CategorieGroepTaal.CategorieGroepID = CategorieGroep.CategorieGroepID AND CategorieGroepShop.CategorieGroepId = CategorieGroep.CategorieGroepID 
WHERE (Shop.ShopID = 23) AND 
     (Taal.TaalCode = 'dut') AND 
     (Artikel.Onzichtbaar = 0) AND 
     (Artikel.NietBestelbaar = 0) AND 
     (Categorie.Onzichtbaar = 0) AND 
     (Artikel.Voorraad >= Artikel.LevertijdDrempel) 

и я превращаю- в LINQ и есть это:

var allProducts = from artikelen in dc.Artikels 
join sa in dc.ShopArtikels on artikelen.ArtikelID equals sa.ArtikelID 
join at in dc.ArtikelTaals on artikelen.ArtikelID equals at.ArtikelID 
join cat in dc.Categories on artikelen.CategorieID equals cat.CategorieID 
join catt in dc.CategorieTaals on cat.CategorieID equals catt.CategorieID 
join catg in dc.CategorieGroeps on cat.CategorieGroepID equals catg.CategorieGroepID 
join catgt in dc.CategorieGroepTaals on catg.CategorieGroepID equals catgt.CategorieGroepID 
join sh in dc.Shops on sa.ShopId equals sh.ShopID 
join catgs in dc.CategorieGroepShops on sh.ShopID equals catgs.ShopId 
join tl in dc.Taals on new { tc1 = at.TaalCode, tc2 = catgt.TaalCode } equals new { tc1 = tl.TaalCode, tc2 = tl.TaalCode } 
where sh.ShopID == shop.BLL.Business.ShopController.CurrentShop.Id 
select dc.Artikels; 

, но у меня есть идея, что я сделал некоторые (незначительные) ошибки при вступлении. любые идеи пожалуйста!

EDIT Я переписал запрос LINQ к этому:

var allProducts = from artikelen in dc.Artikels 
join at in dc.ArtikelTaals on artikelen.ArtikelID equals at.ArtikelID 
join sa in dc.ShopArtikels on artikelen.ArtikelID equals sa.ArtikelID 
join cat in dc.Categories on artikelen.CategorieID equals cat.CategorieID 
join catt in dc.CategorieTaals on cat.CategorieID equals catt.CategorieID 
join sh in dc.Shops on sa.ShopId equals sh.ShopID 
join catgs in dc.CategorieGroepShops on sh.ShopID equals catgs.ShopId 
join tl in dc.Taals on new { tc1 = at.TaalCode, tc2 = catt.TaalCode } equals new { tc1 = tl.TaalCode, tc2 = tl.TaalCode } 
join catgt in dc.CategorieGroepTaals on new { tl.TaalCode, catgs.CategorieGroepId } equals new { catgt.TaalCode, catgt.CategorieGroepID } 
join catg in dc.CategorieGroeps on new { cat.CategorieGroepID, catgt.CategorieGroepID, catgs.CategorieGroepId } equals new { catg.CategorieGroepID, catg.CategorieGroepID, catg.CategorieGroepID } 
where sh.ShopID == 230 
select dc.Artikels; 

, но у меня есть синтаксические ошибки после «ИУ»} Edit 2: изменил присоединиться и заменил «ИУ» с соответствующим полем в базе данных. все еще имеет ошибку после первого} : «Ошибка ввода типа в вызове« Join »

+0

Пожалуйста, подробно остановитесь на вопросе. Какие у вас проблемы? Любые ошибки? Если нет, что вам не нравится? – Rushyo

+0

Кроме того, я бы определенно описал это как «сложный». http://en.wiktionary.org/wiki/complex#Adjective – Rushyo

+0

Что заставляет вас думать об этом? Вы запустили его, чтобы увидеть, работает ли он? – w69rdy

ответ

2

Некоторые из SQL-соединений имеют несколько условий соединения, которые вы не поместили в запрос LINQ.

+0

ОК спасибо, рассмотрим это.не заметили его, потому что мои глаза получают квадратные формы в эту пятницу –

+0

Я изменил его сейчас, но теперь у меня есть простая синтаксическая ошибка –

+0

Какая ошибка, где? –

0

Для этого есть инструмент, но я не пробовал. Может быть, это полезно для вас.

http://www.sqltolinq.com/

+0

Для прямых запросов, подобных этим, это, вероятно, хорошая идея, но в конечном итоге более полезно понять, что генерирует SQL LINQ. Я видел там какие-то странные вещи. –

0

Это выглядит как линия ошибок на самом деле является «Где» причина, а не «Объединение». Вы можете разделить весь длинный оператор Linq на меньший запрос.

так для этого случая, его лучше разбить его так:

var at = from a in dc.ArtikelTaals 
      where a.TaalCode == "dut" 
      select a; 

var catt = from c in dc.CategorieTaals 
      where c.TaalCode == "dut" 
      select c; 

..... 

и вы можете присоединиться к IQueryable «в» и «» в CATT ваш сложный запрос позже.

1

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

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