2012-12-01 5 views
4

저는 일반적으로 데이터베이스 작업에 새로운 경험이 있으며, 무엇이 잘못되었는지에 대한 지침을 얻기를 바랍니다.LINQ to SQL - 데이터베이스 설계 관련 문제

나는 손에 4 표,이 방법으로 현재 설정이 있습니다

enter image description here

회사-을 Company_GoodsPackaging 그것을

에서 특정 데이터와 그냥 일반 회사 테이블 - 회사에 대한 참조 표. 여기에는 회사의 '어떤 종류의 물건'에 대한 정보와 해당 상품에 대한 포장 유형이 수행됩니다.

GoodsType - 기본적으로 열거는, 값은 현재 위치 :

1 Commodity

2 Food/feed

3 Live Animals

4 Plants

5 Special cargo

6 Exceptional

PackagingType - 또한 열거, 값 :에서

1 Parcel

2 Pallet

3 Container

4 Bulk

5 Oversized

CODE

내 내가하고있는 ASP.NET 웹 사이트의 코드 숨김

모든 GoodsType 값을 반복하고 CompanyX (LINQ Company 개체)의 테이블에이 값이 있는지 확인한 다음 값이있는 경우 Packaging_Type.Description은 무엇입니까?

내가 지금 가지고있는 문제는 회사 개체가있을 때 구성원을 추출 할 수없는 것입니다.

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이라는 것을 알고 있습니다.

내 데이터베이스 디자인에 결함이 있거나 코드 논리에 결함이 있습니까? 나는 데이터베이스베이스에서 일하는 것이 매우 새롭다 고 말해야 만합니다. 어떤 도움/입력이라도 대단히 환영 할 것입니다. > Company_GoodsPackagings 많은 관계로 하나 - 내가하지 착각, 회사 해요 경우 내가 VS에서 얻고

오류가

Error 26 'System.Data.Linq.EntitySet' does not contain a definition for 'GoodsType' and no extension method 'GoodsType' accepting a first argument of type 'System.Data.Linq.EntitySet' could be found (are you missing a using directive or an assembly reference?) *****\Account\MyAccountTransport.aspx.cs 33 8

+0

이 디자인 (모델 코드)에 모든 모델을 포함시킬 수 있습니까? – Sampath

답변

2

입니까?

따라서 속성 Copmany_GoodsPackagings가 수집 될 것이며 그래서 당신은 다음과 같이 모든() 함수를 사용해야합니다

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가 SQL로 지원합니다.따라서 상품 포장재 전체를 가져 와서 부울을 결정하기 위해 값이 있는지 여부를 확인하는 것이 좋습니다. 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 } 
} 
+0

동일한 simulataneous 대답에 대한 Upvote : –

+0

내가 좋아하는 사람이 궁금해 ... –

+0

안녕하세요, 도와 주셔서 대단히 감사합니다. 사실 Company -> Company_GoodsPackagings는 일대일 회사가 해당 테이블에 다양한 항목을 가질 수 있으므로 일대 다 (One to Many) 관계입니다. 포함 된 연산자를 제외한 쿼리 연산자의 LINQ to SQL 구현에서는 로컬 시퀀스를 사용할 수 없습니다.이 솔루션을 사용하면 Tim S (감사합니다. :)를 사용하여이 오류가 발생합니다. – KarolC

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") 
+0

동일한 simulataneous 대답 Upvote :) –