0

ID を持っている EF のテーブルの ColumnName が必要です。私のテーブルは次のようなものです:

小売業者

[RetailerId] [int] IDENTITY(1,1) NOT NULL,
[RetailerName] [varchar](50) NOT NULL,
[StateName1] [bit] NOT NULL,
[StateName2] [bit] NOT NULL,
[StateName3] [bit] NOT NULL,

   [SId] [int] IDENTITY(1,1) NOT NULL,
   [StateName] [varchar](50) Not Null

関数からSIdを受け取り、その州にあるすべての小売業者を選択する必要があります。何かのようなもの:

var listOfRetailers = (from m in db.Retailers where m.[a column that it's id is equal to SId] == true select m ).toList();
4

1 に答える 1

0

あなたのコメントから、これがあなたが探しているものだと思います。しかし、あなたがしたことは賢明な設計です。簡単に説明します。

var listOfRetailers;
if(SId == 1)
{
listOfRetailers = db.Retailers.select(r=> r.StateName1.Equals(true)).ToList();
}
else if(SId == 2)
{
listOfRetailers  = db.Retailers.select(r=> r.StateName2.Equals(true)).ToList();
}
else if(SId == 3)
{
listOfRetailers  = db.Retailers.select(r=> r.StateName3.Equals(true)).ToList();
}

編集

技術的には、これは悪い設計です。あなたのStatesテーブルには3つのレコードがあると仮定しています。

1 - ACT
2 - NSW
3 - NT

州ごとに、Retailers テーブルの StateName1、StateName2、StateName3 に対応する列があります。

4 番目の状態 (たとえば ) を導入したいとします4 - VICStateName4ここで、Retailers テーブルに新しい列を追加する必要があります。(これを行うことで、コード レベルと DB レベルの変更が行われます)

また、新しい列を使用すると、未使用/冗長データの追加のオーバーヘッドが発生します。

これはmany-to-many状況であるため (1 つの州に多くの小売業者が存在し、1 つの小売業者が多くの州に存在する可能性があります)、最善のアプローチは 3 つのテーブル (Retailer、State、RetailerState) を作成することRetailerStateです。 StateRetailerテーブル

Retailer
---------
[RetailerId] 
[RetailerName]

State
------
[SId] 
[StateName]

RetailerState
--------------
[RetailerId] 
[SId] 
于 2012-06-01T02:06:31.080 に答える