0

MVC3 で Web アプリケーションを作成しており、linq を使用してデータベースと通信しています。

チェックボックスリストを作成しました。ユーザーは選択に応じていくつかのオプションを選択でき、データベーステーブルに保存されます。問題は編集部分にあります。

シナリオ全体は次のようなものです。

ユーザーは、レストランのオーナーまたはモーテルのオーナーとして登録できます。これら 2 つを区別するために、異なる Business_Type_Id を 1 と 2 に割り当てました。レストランのビジネス タイプに「2」を割り当て、特定のビジネス タイプで料理をマッピングしました。テーブルに「BusinessType」列を追加することにより、同じ「Cuisines」テーブル。ユーザーには、ビジネスの 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; }
    }

[HttpGet] Actionresult Edit(int id) を介して取得している LINQ 結合で、「id」を「BusinessCuisineMappingData.BusinessId」フィールドと比較したいと考えています。実装しようとするとエラーが表示されます。

4

2 に答える 2

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 に答える
0

結合でローカル変数を使用することはできません。ただし、Where句で使用できます。だからあなたがするなら

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

同じ効果があります。

于 2012-05-22T14:21:56.647 に答える