2014-05-22 3 views
1

Как преобразовать это в рамках сущностиПреобразование SQL в Entity Framework

Emp 
______ 
EmpID 
Fname 
Lname 
PostID 

Post 
______ 
PostID 
Position 
Select e.Fname, e.Lname, p.Position from Emp e inner join Post p 
on e.PostID = p.PostID 

и связываются с DataGridView

Trial:

var query = db.Employees.Include("Position")  // source 
    .Join(db.Positions,   // target 
     c => c.PosID,   // FK 
     cm => cm.PosID, // PK 
     (c, cm) => new { Employees = c, Positions = cm }) // project result 
    .Select(x => x.Employees).Where(m => m.Fname.Contains(txtSrchFirstName.Text) && m.City.Contains(txtSrchCity.Text)); 
    .Select(x => new { x.EmpID, x.Lname, x.Fname, x.Position, x.City}); // select result 

    GridView1.DataSource = query1.ToList(); 
    GridView1.DataBind(); 
+0

Какая у вас связь между Employees and Positions table? Это лучше, если вы включите также и отношение таблицы в вопросе. –

+0

Создайте отношение внешних ключей к полю 'PostID', и вы можете напрямую запрашивать данные из' Positions', не используя join. – tia

ответ

1

С с верхней части моей головы:

var query1 = from e in Emp 
      join p in Post 
      on e.PostID equals p.PostID 
      select new {e.Fname, e.Lname, p.Position}; 
0

jmcihin Запрос ney эквивалентен вашему sql-запросу, однако, как правило, с EF вы пытаетесь использовать свойства навигации для доступа к связанным данным, чтобы вам не приходилось описывать отношения между сущностями в каждом запросе.

Вам нужно только написать

var query = from e in db.Employees 
      from p in e.Posts 
      select new { e.EmpID, e.Lname, e.Fname, p.Position, p.City}); 

NB

Я не знаю, откуда Город приходит, это не в исходном запросе, но она находится в вашем суде, а во-вторых, это требует для корректного определения (с навигационным свойством) в модели.

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