2011-09-15 54 views
1

我有一個LINQ查詢了兩個實體這樣使用include語句的功能在實體加入聲明框架

IQueryable<Employee> employees = CreateObjectSet<Employee>().AsQueryable(); 
IQueryable<Department> depts = CreateObjectSet<Department>().AsQueryable(); 

     var result = (from employee in employees       
         join dept in depts 
          on emp.DeptID equals dept.ID 
          select employee 

我的僱員實體有系導航屬性,並返回其整個對象,但此查詢確實不歸部的信息,我想我已經在選擇statment設定值,像這樣

    var result = (from employee in employees       
         join dept in depts 
          on emp.DeptID equals dept.ID 
          **** employee.Dept=dept   **** 
           select employee 

我不想設定Employee類的所有屬性,因此返回新對象,請告訴我有一些更好的方法。

謝謝

回答

1

我的理解是你想要選擇所有員工及其部門(如果我錯了,請糾正我)。如果您有導航屬性,則根本不需要加入。您可以使用Include這樣的:

List<Employee> employeesWithDepartments = CreateObjectSet<Employee>(). 
              Include(e => e.Department). 
              ToList(); 
+0

沒有我的實際查詢是非常複雜的,包括幾個表,因此需要連接,你的方向是正確的,我需要像「包括」,但我需要它在「JOINS」 。 –

+0

我會重複一遍:如果你有導航屬性,你不需要連接。您可以將實際的查詢添加到問題中,並且可以查看如何將「包含」添加到該問題。 – Yakimych

+0

是的,我檢查和交叉檢查,我需要的一切是在導航屬性,我應該使用where子句與此一起,因爲我需要員工與特定的EmployeeID –

1

你不能使用「let」語句作爲破解?

var result = (from employee in employees       
        join dept in depts 
         on employee.DeptID equals dept.ID 
         let notUtile = employee.Dept=dept 
          select employee); 
+0

它給我的錯誤「表達式樹不能包含賦值運算符」上線「讓」它的關鍵字 –

+0

ARG。你能否定義職能employee.SetDept(部門)? (然後在let語句中使用它) – Olivier

+0

哦......我沒有意識到你的查詢是在實體框架集上。我擔心你不能這樣做因爲「select」和「update」語句在SQL中不兼容。 – Olivier