0

我正在 MVC3 上制作一个 Web 应用程序,并且我正在使用 linq 与数据库进行通信。

我制作了一个复选框列表,用户可以在其中根据自己的选择选择一些选项,并将其保存在数据库表中。问题出在编辑部分。

整个场景是这样的:

用户可以注册为餐厅老板或汽车旅馆老板,我已将不同的 Business_Type_Id 分配为 1 和 2 以区分这两者,我为餐厅业务类型分配了“2”,并将美食与特定业务类型映射到相同的“Cuisines”表,通过将“BusinessType”列添加到表中。用户将为其业务分配一个 Business_Id。我提供了一个复选框列表,它从我提供了美食列表的数据库表“Cuisines”中生成其选项。从前端,用户可以根据他们在餐厅提供的选​​择来选择多种美食。选择可能因一个餐厅所有者而异,因此我将每个餐厅所有者的选定值存储在“

这是我在控制器中使用的 linq 连接代码:

[HttpGet]
public ActionResult Edit(int id)
{
    using (var chkl = new BusinessEntities())
    {
        var data = (from CuisinesData in chkl.Cuisines
                join BusinessCuisineMappingData in chkl.BusinessCuisineMapping
                on new { CuisinesData.Id, id } equals new { BusinessCuisineMappingData.CuisinesId, BusinessCuisineMappingData.BusinessId }
                where CuisinesData.BusinessTypeId == 2
                select new CusinesDTO
                {
                    Id = CuisinesData.Id,
                        Name = CuisinesData.Name,
                        IsSelected = BusinessCuisineMappingData.CuisinesId == null ? false : true
                }).Distinct().ToList();
                ViewBag.CuisineList = data;
     }
     return View();
}

这是我的 DTO 课程:

public class CusinesDTO
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsSelected { get; set; }
    }

我想将“id”与我的 LINQ 连接中的“BusinessCuisineMappingData.BusinessId”字段相匹配,我通过 [HttpGet] Actionresult Edit(int id) 获得该字段。当我尝试实现它时,它会提示我一个错误。

4

2 回答 2

0

您不能在联接中使用局部变量。但是,您可以在 Where 子句中使用它。所以如果你这样做

join ...
on CuisinesData.Id equals BusinessCuisineMappingData.CuisinesId
...
where BusinessCuisineMappingData.BusinessId == id

你会有同样的效果。

于 2012-05-22T14:21:56.647 回答
0

“join 子句中的表达式类型不正确。调用‘Join’时类型推断失败”

这表明您两侧的类型JOIN不相等。你得到一个编译器错误;JOIN检查子句两边的类型应该相对容易。

编辑:重读你放的东西,我认为下面是你想要做的:

[HttpGet]
public ActionResult Edit(int id)
{
    using (var chkl = new BusinessEntities())
    {
        var data = (from CuisinesData in chkl.Cuisines
                    join BusinessCuisineMappingData in chkl.BusinessCuisineMapping
                    on CuisinesData.Id equals BusinessCuisineMappingData.CuisinesId
                    where CuisinesData.BusinessTypeId == id
                    select new CusinesDTO
                    {
                        Id = CuisinesData.Id,
                        Name = CuisinesData.Name,
                        IsSelected = BusinessCuisineMappingData.CuisinesId == null ? false : true
                    }).Distinct().ToList();
                    ViewBag.CuisineList = data;
    }
    return View();
}
于 2012-05-22T09:35:50.400 回答