映射无法正常工作(ASP.NET)

时间:2018-03-30 09:18:20

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我需要获得与人相关的所有提案

我在db中有几个表。它是AspNetUsers,UserToRegion,Region,Cities,Projects和proposal。

这是

的模型
AspNetUsers

https://pastebin.com/xts1Xh8m

它与表UserToRegions

的区域连接

这是模型

https://pastebin.com/8PnBuqf1

因此,一个地区可以拥有多个用户

以下是Region Model

https://pastebin.com/9GS9Qst7

城市与地区相关

所以这里是City

的模型

https://pastebin.com/VWjT0V9h

与城市相关的项目

所以这里是Project模型

https://pastebin.com/ziE3Sb9C

我试图获取项目和提案的数据(提案与项目有关)

在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.,它看不到项目

这是图表,它会更容易

enter image description here 我的麻烦在哪里?

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。

2 个答案:

答案 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