4

私は一般的にデータベースの作業にまったく慣れていないので、何がうまくいかなかったのかについてあなたのガイダンスを得たいと思っています.

手元に 4 つのテーブルがあり、現在このようにセットアップされています。

ここに画像の説明を入力

Company - 特定のデータを含む通常の Company テーブル

Company_GoodsPackaging - 会社の参照テーブル。会社が「行う」商品の種類と、その商品に対してどのような梱包タイプが行われているかに関する情報。

GoodsType - 基本的に列挙型で、現在の値は次のとおりです。

1 商品

2 食品・飼料

3 生きている動物

4工場

5 特殊貨物

6 格別

PackagingType - また、列挙型、値:

1 小包

2 パレット

3 コンテナ

4 バルク

5 特大

コード

私の ASP.NET Web サイトのコード ビハインドでは、次のことを行っています。

すべての GoodsType 値を反復処理し、CompanyX (LINQ Company オブジェクト) のテーブルにこの値があるかどうかを確認します。ある場合、値の Packaging_Type.Description は何ですか。

私が今抱えている問題は、Company オブジェクトを持っているときに、そのメンバーを抽出できないように見えることです。

var theSource = (from g in Data.GoodsTypes
select new
{
  gvGoodsType = g.Description,
  gvParcels = true,
  gvContainers = curCompany.Company_GoodsPackagings.GoodsType == g.Goods_Type &&
  curCompany.Company_GoodsPackagings.PackagingType1.Description == "Container"
}

関係が完成し、すべてが正しいように見えますが、Company_GoodsPackaging エントリの GoodsType と PackagingType を抽出できないようです。私はそれがEntitySetであることを知っています。

データベースの設計に問題がある/コード ロジックに問題があるのはどこですか? 私は、データベースで一緒に作業するのは非常に新しいと言わざるを得ません。ヘルプ/入力は大歓迎です。

VSで発生するエラーは

エラー 26 'System.Data.Linq.EntitySet' には 'GoodsType' の定義が含まれておらず、型 'System.Data.Linq.EntitySet' の最初の引数を受け入れる拡張メソッド 'GoodsType' が見つかりませんでした (ディレクティブまたはアセンブリ参照を使用していますか?) *****\Account\MyAccountTransport.aspx.cs 33 8

4

2 に答える 2

2

私が間違っていなければ、Company -> Company_GoodsPackagings は 1 対多の関係ですか?

したがって、プロパティ Copmany_GoodsPackagings はコレクションになるため、次のように Any() 関数を使用する必要があります。

var theSource = (from g in Data.GoodsTypes
select new
{
  gvGoodsType = g.Description,
  gvParcels = true,
  gvContainers = curCompany.Company_GoodsPackagings.Any(gp => qp.GoodsType == g.Goods_Type && gp.PackagingType1.Description == "Container")
}

編集: Any() を使用するという私の提案は、Linq to SQL ではサポートされていないようです。したがって、boolean gvContainers を決定するために、商品パッケージ オブジェクト全体を戻し、値があるかどうかを確認することをお勧めします。

次に、匿名型を具象クラスに変換し、例の最後にプロパティを追加できます。

var theSource = (from g in Data.GoodsTypes
select new GoodsResult
{
  gvGoodsType = g.Description,
  gvParcels = true,
  gvGoodsPackaging_Container = curCompany.Company_GoodsPackagings.FirstOrDefault(gp => qp.GoodsType == g.Goods_Type && gp.PackagingType1.Description == "Container")
}

public bool gvContainers {
    get { return this.gvGoodsPackaging != null }
}
于 2012-12-01T10:39:36.913 に答える
2

問題は、curCompany.Company_GoodsPackagingsそれが GoodsPackagings のコレクションであることです (したがって、複数形と の言及System.Data.Linq.EntitySet)。したがって、この方法で会社の単一の GoodsType を直接参照することはできません。

あなたは会社の GoodsPackagings のそれぞれをあなたの条件に照らしてテストする方法を探していると思います. これを行うには、Any()Linq 拡張メソッドを使用できます。

using System.Linq;

...

gvContainers = curCompany.Company_GoodsPackagings.Any(gp => gp.GoodsType ==
   g.Goods_Type && gp.PackagingType1.Description == "Container")
于 2012-12-01T10:39:38.093 に答える