2010-07-22 5 views
1

Я почти сделано преобразование приложение MySQL в Linq2SQL, но изо всех сил, чтобы получить мою голову вокруг этого последнего запроса SQLLinq 2 SQL Синтаксис Помощь

SELECT a.URL, b.URL AS DuplicateURL 
FROM Pages a 
INNER JOIN Pages b ON a.MetaDescription = b.MetaDescription 
        AND a.PageID <> b.PageID 
WHERE a.DomainID = @reportid 
    AND b.DomainID = @reportid 
    AND LENGTH(TRIM(a.MetaDescription)) > 0 
    AND a.URL < b.URL 
ORDER BY a.URL ASC 

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

Любая помощь очень ценится

+0

LINQ к SQL не поддерживает базы данных MySQL. Вам также придется перейти на MS SQL или начать использовать Entity Framework. – Steven

+0

Я не использую MySQL Я пытаюсь использовать Linq2SQL? Как и в переносе этого запроса в Linq, поэтому я прошу синтаксическую помощь: S – leen3o

+0

Да, но LINQ to SQL не может разговаривать с базой данных MySQL. Таким образом, вы перемещаете свои данные в базу данных Microsoft SQL? – Steven

ответ

2

Это выглядит следующим образом:

var DuplicatePages = 
    from a in DBContext.Pages 
    join b in DBContext.Pages on a.MetaDescription equals b.MetaDescription 
    where (a.PageID <> b.PageID) && (a.DomainID == ReportID) && 
    (b.DomainID == ReportID) && (a.MetaDescription.Trim().Length > 0) && 
    (a.URL < b.URL) 
    orderby a.URL 
    select new { Url = a.URL, DuplicateUrl = b.URL }; 
+0

Удивительная благодарность ... Любите это место, я так многому научился !! – leen3o

2

Это довольно straigtforward:

var reportId = ...; 

var duplicates = 
    from a in db.Pages 
    from b in db.Pages 
    where a.MetaDescription == b.MetaDescription 
    where a.PageID != b.PageID 
    where a.DomainID == reportId 
    where b.DomainID == reportId 
    where a.MetaDescription.Trim().Length > 0 
    where a.URL < b.URL 
    orderby a.URL 
    select new { Url = a.URL, DuplicateUrl = b.Url } 
+0

Только вопрос, будет ли 'a.MetaDescription.Trim(). Length' переведен на SQL в порядке? Я спрашиваю, потому что я не проверял свой ответ. – Lazarus

+0

Я тоже не проверял, но поставщик LINQ to SQL имеет довольно солидный переводчик запросов, поэтому я предполагаю, что это работает. Но, пожалуйста, проверьте. – Steven

+1

Согласно LINQPAD '.Trim(). Length>' переводится в 'LEN (LTRIM (RTRIM (.)))>', Но это было для базы данных, которую я имел под рукой, а не этой. –

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