2011-01-27 4 views
1
create table employee 
(
    id int, 
    name varchar(10), 
    dept_id int, 
    dept_name varchar(10) 
); 

insert into employee values(1, 'ABC1', 1, ''); 
insert into employee values(2, 'ABC2', 2, ''); 
insert into employee values(3, 'ABC3', 1, ''); 
insert into employee values(4, 'ABC4', 2, ''); 
insert into employee values(5, 'ABC5', 1, ''); 

create table dept 
(
    dept_id int, 
    dept_name varchar(10) 
); 

insert into dept values(1, 'XYZ1'); 
insert into dept values(2, 'XYZ2'); 
UPDATE e 
SET e.dept_name = d.dept_name 
FROM employee AS e 
     JOIN dept AS d 
     ON e.dept_id = d.dept_id

Как преобразовать выше запроса (жирным шрифтом) в запросе LINQ?Update один DataTable из другого

ответ

0

Я не уверен, что вы можете. Linq to SQL означает средство для получения данных в/из вашей базы данных для использования в вашем коде приложения. Здесь вы хотите обработать данные более низкого уровня, что лучше всего сделать в T-SQL, как показывает ваш пример.

Вы можете загрузить записи из обеих таблиц, используя объединение в другой объект, а затем итерацию результатов.

// I'm doing this this way because I can't remember the syntax for 
// LoadOptions and want to be sure to avoid the SELECT N+1 issue. 
var query = from e in db.Employees 
      select new EmployeeDepartment 
         { 
          Employee = e, 
          Department = e.Department 
         }; 

foreach (var item in query) 
{ 
    item.Employee.DepartmentName = item.Department.DepartmentName; 
} 

db.SubmitChanges(); 

Однако
Вы, наверное, уже знаете это, но было бы лучше, чтобы нормализовать базу данных, так что название отдела является только на столе универмага, и использовать employee-> отношения отдела получить название отдела для данного сотрудника.

0

использованием join:

var employeeDept = from e in db.employees 
        Join d in db.Depts on e.dept_id equals d.dept_id 
        select new 
        {Employee = e , 
        Department = d}; 

foreach(var ed in employeeDept) 
{ 
    ed.Employee.DepartmentName = ed.Department.DepartmentName; 
} 
db.submitChanges(); 
0

Один из раствора следующим образом:

var enumEmp = employee.AsEnumerable(); 
var enumDept = dept.AsEnumerable(); 

var employeeDept = from empl in enumEmp 
join d in enumDept on empl.Field<int>("dept_id") equals d.Field<int>("dept_id") 
select new {enumEmp = empl , enumDept = d}; 

foreach(var ed in employeeDept) 
{ 
ed.enumEmp.SetField<string>("dept_name",ed.enumDept.Field<string>("dept_name")); 
}