2012-08-12 3 views
0

나는이 질문에 대한 답변을 인터넷에서 검색했습니다. 엔티티 프레임 워크로 생성 된 데이터베이스에 존재하며 db (내 DBContext 클래스의 인스턴스)를 통해 액세스되는 모델이 있습니다. db를 사용하여 기본 키가 아닌 다른 것을 찾으십시오.

Public Class Bill 

    Public Property BillId() As Integer 

    Public Property CustomerId() As String 

    Public Property BillStatus() As String 

End Class 

다음 가정이 먼저 언급 한 기능에 나는 고객 ID가 아니라이 모델의 기본 키 (BillId)를 어떻게 전달 :

Function Details(id As Integer) As ViewResult 
    Dim bill As Bill = db.Bills.Find(id) 
    Return View(bill) 
End Function 

법안 클래스의 모델은 다음과 같이 정의된다 나는 이것을 사용하여 그 고객 ID와 함께 청구서 만 포함 된 '희구 표명 법안'을 작성합니다.

위의 예에서 Bills는 기본 키만 보이는 .Find (id)로 필터링되었습니다. 비슷한 방법을 .Find()가 아닌 키 필드에서 사용할 수 있기를 원합니다. 이 경우 CustomerId. 필터의

답변

1

항상 CustomerId와 일치하는 엔티티가 하나만 있다고 확신하는 경우 Single을 사용할 수 있습니다. 정확히 1이 발견되지 않는 경우

비주얼 베이직 .NET

Dim myBill = db.Bills.Single(Function(x) x.CustomerId = cId); 

C# .NET을

var myBill = db.Bills.Single(x => x.CustomerId == cId); 

주,이 예외가 발생합니다.

0

를 사용하여 .NET 버전()

Dim bills = db.Bills.Where(Function(x) x.CustomerId = cId) 

또는

Dim bills = From i in db.Bills 
       Where i.CustomerId = cId 
       Select i 

편집 : 스콧의 코멘트 통화 FirstOrDefault 당()는 하나의 결과를 반환합니다. 존재하지 않는 경우는, null가 돌려 주어집니다. 그렇게하십시오.

+1

목록 (Bill of)이 반환됩니다. 하나의 Bill 객체를 얻기 위해 .FirstOrDefault()를 끝에 추가 할 수 있습니다. VB.NET에서 사용되는 LINQ에 대한 자세한 내용은 여기를 참조하십시오. http://msdn.microsoft.com/en-us/vstudio/bb688088.aspx –

관련 문제