2012-05-22 44 views
0

我正在MVC3上創建Web應用程序,並且正在使用linq與數據庫進行通信。我如何將任何id傳遞給[HttpGet] ActionResult中的linq連接以編輯

我做了一個checkboxlist,用戶可以根據自己的選擇選擇一些選項,並將其保存在數據庫表中。問題出在編輯部分。

整個場景是這樣的:

用戶可以根據餐館老闆或汽車旅館所有者註冊,我已經分配了不同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; } 
    } 

我想comape的 「身份證」與我的LINQ連接中的「BusinessCuisineMappingData.BusinessId」字段,我通過[HttpGet] ActionResult Edit(int id)獲取。它會在我嘗試實現時提示錯誤。

+0

你會得到什麼錯誤?你能發表細節嗎? – glosrob

+1

'public ActionResult Edit(int「id」)' - typo?應該沒有引號 – hyp

+0

在我的原代碼中沒有「id」的雙引號,我把這些qutes放在這裏給出一個更好的主意,我想在我的linq連接中使用哪個值。 – Shekhar

回答

0

「之類的表述加入條款不正確。類型推斷呼叫失敗‘加入’」

這表明你的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(); 
} 
+0

是的,我知道這件事。它沒有采用'id',它需要一個與「CuisinesData」相關的字段。所以我的問題是,我如何使用我在「ActionResult編輯」中獲得的'id'與「BusinessCuisineMappingData.BusinessId」字段進行比較。 – Shekhar

+0

BusinessCuisineMappingData.BusinessId字段的類型是什麼? – glosrob

+0

它是int類型的。 – Shekhar

0

不能使用在加入一個局部變量。但是,您可以在Where子句中使用它。所以,如果你做

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

你會有同樣的效果。

+0

我之前也嘗試過這種東西,即使我想到了和你一樣的方式,但它並沒有給出我想要的結果,它僅僅返回了所選的美食Ids,但是我想要選擇的選項Ids與所有列出的菜餚Ids。意味着它應該返回我的表格中的每一個cusines ID,然後在第二列中,它應該返回BusinessType == 2的特定BusinessId所選的菜單Id。 – Shekhar

+0

也許你應該添加一個示例輸出列表到您的帖子。僅從單詞中獲得是很難的。 –

相關問題