C# Lambda vs查询表达式实体框架/外键关系
简而言之:使用lambda表达式获取记录和使用查询表达式获取记录之间有什么区别吗 在以下示例中: 我拿到了一份员工记录 他修改了工资却没有储蓄 对上下文的更改我获取包含薪水表的相同记录 为什么执行查询2和查询3时的结果不同C# Lambda vs查询表达式实体框架/外键关系,c#,entity-framework,C#,Entity Framework,简而言之:使用lambda表达式获取记录和使用查询表达式获取记录之间有什么区别吗 在以下示例中: 我拿到了一份员工记录 他修改了工资却没有储蓄 对上下文的更改我获取包含薪水表的相同记录 为什么执行查询2和查询3时的结果不同 var empdId = Guid.Parse("C8475622-09A9-4284-80D4-AAXXK"); //City for this employee was Washington in database var emp = ctx.Employee .
var empdId = Guid.Parse("C8475622-09A9-4284-80D4-AAXXK");
//City for this employee was Washington in database
var emp = ctx.Employee
.FirstOrDefault(emp => emp.ID == empId);
emp.City = "New York"; //Modified the entity
//Lambda version
//Fetched again including foreign key relation Salary
var employeeCity = ctx.Employee.Include("Salary")
.FirstOrDefault(emp => emp.ID == empdId).City;
//New York
var cityfetchedAgain = from e in ctx.Employee
join sal in ctx.Salary on e.ID equals sal.EmployeeId
where e.ID == empdId
select e.City;
var city = cityfetchedAgain.FirstOrDefault();
//Washington
编辑:
我将重新表述我的问题:查询的Include版本返回已更改的属性,即使更改未提交到数据库。但是,LINQ Join不知道这里的context City属性发生了变化。记录是从数据库中提取的
我在这些表之间配置了显式外键。我应该吗
总是喜欢包括
include和join不一样。示例中的两个查询不一样,但不是因为一个使用查询语法,另一个使用扩展方法,而是因为它们不一样。在第三个查询中,返回status字段,第二个查询返回city。那么这两个字段都是一样的?@PragneshKhalas第三个查询是一个拼写错误。查询是不同的,因为它们都没有明确的顺序,.FirstOrDefault基本上转换为前1。。。。可以从结果集中选择感觉像的任何行作为第一行。。。。。