我需要获得与人相关的所有提案
我在db中有几个表。它是AspNetUsers,UserToRegion,Region,Cities,Projects和proposal。
这是
的模型AspNetUsers
它与表UserToRegions
这是模型
因此,一个地区可以拥有多个用户
以下是Region Model
城市与地区相关
所以这里是City
与城市相关的项目
所以这里是Project
模型
我试图获取项目和提案的数据(提案与项目有关)
在Controller
上这样 public JsonResult Index(string email)
{
var id = db.AspNetUsers.Where(x=> x.Email == email).FirstOrDefault();
string id_val = id.Id;
var proposals = db.UserToRegions.Where(x=> x.User_Id == id_val)
.Include(u => u.AspNetUser).Include(u => u.Region).Include(u=>u.Region.Cities)
.Select(x=> new {
Project = x.Region.Cities.,
WorkTime = x.WorkTime,
Quantity = x.Quantity,
Price = x.Price,
Service = x.Service.Name,
DateFrom = x.Date,
DateTo = x.Date_to,
WorkTimeTo = x.WorkTimeTo,
Id = x.Id,
EditingDate = x.CreatingDate
})
.ToList();
return Json(proposals, JsonRequestBehavior.AllowGet);
}
但是在这一行Project = x.Region.Cities.,
它看不到项目
这是图表,它会更容易
UPDATE 我像这样重写方法
var proposals = db.Proposals.Where(x=> x.Project.City.Region.UserToRegions)
.Select(x=> new {
Project = x.Region.Cities.,
WorkTime = x.WorkTime,
Quantity = x.Quantity,
Price = x.Price,
Service = x.Service.Name,
DateFrom = x.Date,
DateTo = x.Date_to,
WorkTimeTo = x.WorkTimeTo,
Id = x.Id,
EditingDate = x.CreatingDate
})
.ToList();
return Json(proposals, JsonRequestBehavior.AllowGet);
}
现在,我没有看到UserToRegions.UserId。
答案 0 :(得分:2)
你的lambda Expression是通过join操作组合多个表,但是你只传递where()condition而没有参数来连接所有其他表说userid,而是用一些参数连接多个表
var UserInRole = db.UserProfiles.
Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId,
(u, uir) => new { u, uir }).
Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro })
.Where(m => m.r.u.UserId == 1)
.Select (m => new AddUserToRole
{
UserName = m.r.u.UserName,
RoleName = m.ro.RoleName
});
您可以参考此问题来解决您的问题,例如here
答案 1 :(得分:0)
该地区的城市是一个集合,因此您需要在城市上添加.FirstOrDefault()以获取城市上的项目集合。但这只会让你获得该地区第一个城市的项目,这可能不是你想要的。
如果您尝试返回区域中的所有项目,最好使用显式连接并稍微改变您的方法。
这是一个适合您的起点:
http://www.dotnettricks.com/learn/linq/sql-joins-with-csharp-linq