Linq to Entities(EF):如何在不进行连接的情况下获取FK的值

bug*_*ixr 3 c# asp.net entity-framework

我正在使用Linq to Entities.我有一个主表,Employee设置有一个名为vendorID的字段.供应商ID是Vendors表中的外键.

就像现在一样,Employee对象不直接公开vendorID.相反,我只能这样访问它:

var employee = (from e in context.Employees.Include("tbl_vendors")
               where e.employeeID = 1
               select e).FirstOrDefault();

//this gets the vendor ID
int vendorID = employee.tbl_vendors.vendorID;
Run Code Online (Sandbox Code Playgroud)

这很好,花花公子,但它是数据库的额外工作,因为它强制连接不需要任何东西.有没有办法获得该键值而不必强制连接到tbl_vendors表?

Ale*_*mes 5

实际上这很简单你基本上这样做:

var tblVendorID = (from e in context.Employees
                  select e.tbl_vendors.ID).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

即使看起来你正在进行连接,L2E也会优化连接.

您可以使用以下代码进行确认:

var results = from e in ctx.Employees
              select e.tbl_vendors.ID;

var query = results as ObjectQuery<int>;
string sql = query.ToTraceString();
Run Code Online (Sandbox Code Playgroud)

希望这有助于Alex(微软).