SQL INNER JOIN с предложением WHERE в формате LINQ - PullRequest
3 голосов
/ 05 января 2012

Как бы я преобразовал этот SQL-запрос в 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

Ответы [ 3 ]

11 голосов
/ 05 января 2012

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

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 в вашей модели, вы должны проецировать на него, если не во многих случаях, вероятно, вы должны его создать.

2 голосов
/ 05 января 2012

Решение от @BrokenGlass прекрасно.Однако, если у вас есть отношение 1..many, редко требуется использовать оператор соединения в LINQ.В этом примере, если company-> personell был 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)
0 голосов
/ 23 декабря 2017
   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();
...