0

私は ASP.Net MVC や Entity Framework の経験があまりありません。

問題は次のとおりです。税コード セット、組織、およびどのセットがどの組織にリンクされているかの情報を含むテーブル 'DisplayData' のデータベース テーブルがあります。すべての組織とすべての税コード セットを返すことは非常にうまく機能します。しかし、これで、選択した組織に基づいて税コードのリストを作成できるはずです。

これまでの関連コードは次のようになります。

       IEnumerable<TaxCodes> taxcodelist = null;
       IEnumerable<Organizations> orglist = null;
       IEnumerable<DisplayData> taxcodeids = null;

       model.OrgId = Convert.ToInt64(Request.QueryString["OrgId"]);
       if (model.OrgId == 0) 
           model.OrgId = 1;


       taxcodelist = db.TaxCodes.AsNoTracking().Distinct().OrderBy(s => s.Id).ToList();
       orglist = db.Organizations.AsNoTracking().Distinct().OrderBy(s => s.org_id).ToList();
       taxcodeids = db.DisplayData.Where(s=>s.CompanyId == model.OrgId).ToList();

       model.TaxCodeList = new SelectList(taxcodelist, "ID", "Name");
       model.OrgList = new SelectList(orglist, "org_id", "org_name");

これは機能しますが、実際の問題は、TaxCodeList に組織に一致するオプションのみを含める方法です。

事前に助けてくれてありがとう!

4

1 に答える 1

0

このようなことを試してください

   taxcodeids = db.DisplayData.Where(s=>s.CompanyId == model.OrgId).ToList();
   taxcodelist = db.TaxCodes.AsNoTracking().Distinct().Where(x=> taxcodeids.Contains(y => y.ID == x.TAX_CODE_ID)).OrderBy(s => s.Id).ToList();
   orglist = db.Organizations.AsNoTracking().Distinct().OrderBy(s => s.org_id).ToList();


   model.TaxCodeList = new SelectList(taxcodelist, "ID", "Name");
   model.OrgList = new SelectList(orglist, "org_id", "org_name");

それを行うためのよりクリーンな方法があり、今すぐそれに取り組みます

from dd in db.DisplayData
join tc in db.TaxCodes on dd.TAX_CODE_ID equals tc.ID
where dd.CompanyId == model.OrgId
select tc

それはそれを行う必要があります、私はまだそれをテストしていないことに注意してください

于 2013-07-11T10:32:48.417 に答える