我正在开发一个用于报告和更新的Web门户。 用于显示记录。 我正在从控制器参数传递ID。
如果要从一个表中获取数据,则工作正常。 例如
Var employee = slp.urlt.where ( x=> x.Id == Id).ToList ();
但是当我与另一个表联接时,会出现错误
var result = from ut in slp.urlt
join ct in slp.Cities on ut.City equals ct.Id
where ut.Id == Id
select new
{
ut.R_Name_Enn,
ut.R_Name_Arr,
ut.R_Addr_Enn,
ut.R_Addr_Arr,
ct.Id,
ct.Name,
ct.Name_Arr
};
所以我正在用sql ..进行以下查询,在sql中工作正常。
SELECT A.R_name_e,A.R_name_a,A.R_addr_e,A.R_addr_a,B.Id,B.Name,B.Name_ar FROM urlt A inner join City B on A.City = B.Id WHERE A.Id = 90000001
答案 0 :(得分:0)
我认为您忘记放置查询或将其转换为列表。列在最后。
var result = (from ut in slp.urlt
join ct in slp.Cities on ut.City equals ct.Id
where ut.Id == Id
select new
{
ut.R_Name_Enn,
ut.R_Name_Arr,
ut.R_Addr_Enn,
ut.R_Addr_Arr,
ct.Id,
ct.Name,
ct.Name_Arr
}).ToList();
答案 1 :(得分:0)
好的,因此您拥有一个DbContext
和Employees
的{{1}}。每个Cities
都生活在Employee
中;每个City
是零个或多个City
的驻留位置。显然,使用外键的简单一对多关系。
在entity framework code-first conventions之后,您将获得与以下类相似的内容:
Employees
由于我遵循实体框架代码的第一约定,因此实体框架将能够检测表和列以及城市与雇员之间的一对多关系。
仅当您要对表或列使用非默认名称时,才需要属性或流利的API。
给出一个
class City { public int Id {get; set;} // every city Houses zero or more Employees: public virtual ICollection<Employee> Employees {get; set;} ... // other properties } class Employee { public int Id {get; set;} // every Employee lives in exactly one City, using foreign key public int CityId {get; set;} public virtual City {get; set;} } class MyDbContext : DbContext { public DbSet<City> Cities {get; set;} public DbSet<Employee> Employees {get; set;} }
,您想要Id
的多个属性Employee
,其中包含Id
的几个属性City
您可以使用联接。但是,如果使用Employee
属性,则实体框架足够聪明,可以了解需要哪个连接。该代码对读者来说看起来自然得多:
City
我希望只有一名员工具有此ID。要获取此员工,请使用:
var queryEmployees = myDbcontext.Employees // from the sequence of all Employees
.Where(employee => employee.Id == Id) // keep only the employee with this Id
.Select(employee => new // from the remaining employees
{ // make one new object with properties:
NameEnn = employee.R_Name_Enn,
NameArr = ut.R_Name_Arr,
AddrEnn = ut.R_Addr_Enn,
AddrArr = ut.R_Addr_Arr,
City = new // I chose to make a sub-property for city
{ // if desired, you can flatten it.
Id = employee.City.Id,
Name = employee.City.Name,
NameArr = employee.City.Name_Arr,
},
});
或者如果您真的想要一个包含此var fetchedEmployee = queryEmployees.FirstOrDefault();
的列表:
Employee
如果您真的认为联接更具可读性,并且具有更好的可维护性-我怀疑,您可以使用内部联接获得相同的结果:
var fetchedEmployees = queryEmployees.ToList();