我正在MVC3上创建一个Web应用程序,我正在使用linq与数据库进行通信。
我制作了一个复选框列表,用户可以根据自己的选择选择一些选项,并将其保存在数据库表中。问题出在编辑部分。
整个场景是这样的:
用户可以注册为餐馆老板或汽车旅馆老板,我已将不同的Business_Type_Id指定为1和2以区分这两者,我已为餐厅业务类型指定了'2',并将菜肴映射到特定业务通过在表格中添加“BusinessType”列,键入相同的“菜单”表。将为用户分配Business_Id用于其业务。我提供了一个复选框列表,它从数据库表“菜系”中生成其选项,我在其中列出了菜单。从前端,用户可以根据他们在餐厅提供的食物选择多种美食。选择可能因餐馆老板与另一餐馆老板而异,因此我将每个餐馆老板的选定值存储在“BusinessCuisinesMapping”表中,其中我将特定用户的特定BusinessId映射到所选择的CuisineId。 现在要填充菜单列表进行编辑或更新我写了一个linq连接,但我需要将它与传递给[HttpGet] ActionResult Edit的Business_Id进行比较。这就是我被卡住的地方。
这是我在控制器中使用的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; }
}
我想在我的LINQ连接中将“id”与“BusinessCuisineMappingData.BusinessId”字段进行comape,我通过[HttpGet] Actionresult Edit(int id)获取该字段。当我尝试实现它时,它会提示我一个错误。
答案 0 :(得分:0)
“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();
}
答案 1 :(得分:0)
您不能在联接中使用局部变量。但是,您可以在Where子句中使用它。所以,如果你这样做
join ...
on CuisinesData.Id equals BusinessCuisineMappingData.CuisinesId
...
where BusinessCuisineMappingData.BusinessId == id
你会有同样的效果。