2012-01-05 3 views
3

Как бы преобразовать этот sql-запрос в LINQ?SQL INNER JOIN с предложением WHERE в формате LINQ

SELECT company.ticker, company.primary_analyst, 
     personnel.last_name, company.research_associate, 
     company.secondary_associate, company.coverage_status 
FROM company 
    INNER JOIN personnel ON company.primary_analyst = personnel.dpinitials 
WHERE personnel.last_name='marley' AND company.associate='ml' 
ORDER BY company.coverage_status 
+0

см. [Преобразование SQL в LINQ, часть 6: объединения (Bill Horst)] (http://blogs.msdn.com/b/vbteam/archive/2007/12/31/converting-sql-to-linq-part-6 -joins-bill-horst.aspx), к сожалению, к VB ... ну –

ответ

11

Это очень похоже:

var results = from c in company 
       join p in personnel on c.primary_analyst equals p.dpinitals 
       where p.last_name == 'marley' and c.associate == 'ml' 
       orderby c.coverage_status asc 
       select new 
       { 
       c.ticker, c.primary_analyst, p.last_name, c.research_associate, 
       c.secondary_associate, c.coverage_status 
       }; 

Над проектами анонимного класса со свойствами, которые вы хотите - если у вас есть эквивалентный класс POCO в вашей модели, вы должны проецировать в том, что, если не во многих случаев, которые вы, вероятно, должны создать.

+0

Я использую LINQPad. Есть ли способ сделать мой запрос как «выражение C#»? –

2

Решение от @BrokenGlass идеально подходит. Однако, если у вас есть отношения 1..many, редко бывает необходимо использовать оператор объединения в LINQ. В этом примере, если компания-> был 1..many Аренда персонала, я бы написать запрос следующим образом:

var results = from c in company 
       where c.associate == "ml" 
       from p in c.personnel 
       where p.last_name == "marley" 
       orderby c.coverage_status asc 
       select new 
       { 
        c.ticker, 
        c.primary_analyst, 
        p.last_name, 
        c.research_associate, 
        c.secondary_associate, 
        c.coverage_status 
       }; 

Это также может быть записана с помощью синтаксиса выражения цепи:

var results = company.Where(c => c.associate == "ml") 
        .SelectMany(c => c.personnel, (c, p) => new 
        { 
         c.ticker, 
         c.primary_analyst, 
         p.last_name, 
         c.research_associate, 
         c.secondary_associate, 
         c.coverage_status 
        }) 
        .Where(x => x.last_name == "marley") 
        .OrderBy(x => x.coverage_status) 
-1
var list = (from u in db.Users 
         join c in db.Customers on u.CustomerId equals c.CustomerId 
         where u.Username == username 
         select new {u.UserId, u.CustomerId, u.ClientId, u.RoleId, u.Username, u.Email, u.Password, u.Salt, u.Hint1, u.Hint2, u.Hint3, u.Locked, u.Active,c.ProfilePic}).First(); 
+2

Вы хотели бы увеличить свой код только ответ с некоторым объяснением? Это уменьшит ошибочное представление о том, что StackOverflow - бесплатная служба написания кода. – Yunnosch