4

我对一般的数据库工作很陌生,希望得到您的指导,了解哪里出了问题。

我手头有 4 张桌子,目前以这种方式设置:

在此处输入图像描述

公司- 只是一个普通的公司表,其中包含某些数据

Company_GoodsPackaging - Company 的参考表,其中包含有关公司“生产”何种商品以及该商品的包装类型的信息。

GoodsType - 基本上是一个枚举,现在的值是:

1 商品

2 食物/饲料

3 活体动物

4 植物

5 特殊货物

6 卓越的

PackagingType - 也是一个枚举,值:

1 个包裹

2 托盘

3 集装箱

4 散装

5 超大

代码

在我的 ASP.NET 网站的代码隐藏中,我正在执行以下操作:

我遍历所有 GoodsType 值,并尝试查看 CompanyX(一个 LINQ 公司对象)在其表中是否有此值,如果有,该值的 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 是一对多的关系吗?

因此,属性 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")
}

编辑:Linq to SQL 似乎不支持我使用 Any() 的建议。因此,我建议您带回整个货物包装对象,然后检查它是否具有值以确定布尔 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)。因此,您不能以这种方式直接引用 Company 的单个 GoodsType。

我认为您正在寻找一种方法来根据您的条件测试公司的每一个货物包装。为此,您可以使用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 回答