0

私はこの質問に対する答えをインターネットで検索しましたが、運が悪かったです。エンティティ フレームワークで作成されたデータベースに存在し、db (DBContext クラスのインスタンス) を介してアクセスされるモデルがあります。

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

請求クラスのモデルは次のように定義されます。

Public Class Bill

    Public Property BillId() As Integer

    Public Property CustomerId() As String

    Public Property BillStatus() As String

End Class

最初に述べた関数で、このモデル (BillId) の主キーではなく CustomerId が渡されたと仮定すると、これを使用して、その customerId を持つ請求書のみを含む「Dim bill As Bill」を作成するにはどうすればよいでしょうか。

Bills が .Find(id) でフィルタリングされた上記の例のように - これは主キーのみを調べます - .Find() と同様のメソッドを非キー フィールドで使用できるようにしたい: この場合は CustomerId .

4

2 に答える 2

1

または、そのCustomerIdに一致するエンティティが常に1つだけであることが確実な場合は、Singleを使用できます。

VB .NET

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

C#.NET

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

正確に1が見つからない場合、これは例外をスローすることに注意してください。

于 2012-08-12T17:19:51.187 に答える
0

.NET のバージョンのフィルターを使用する (Where)

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

また

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

編集: スコットのコメントごとに FirstOrDefault() を呼び出して、1 つの結果のみを返します。存在しない場合は、null が返されます。それをするために。

 Dim bill = (From i in db.Bills
                    Where i.CustomerId = cId 
                    Select i).FirstOrDefault()
 If Not IsDBNull(bill) Then
  /*Do Stuff*/
 End If
于 2012-08-12T17:09:04.450 に答える