我在互联网上搜索了这个问题的答案但没有运气。我有一个模型存在于使用实体框架创建的数据库中,可以通过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
假设在第一次提到的函数中我传递了CustomerId而不是这个模型的主键(BillId),我将如何使用它来创建一个'Dim bill As Bill',其中只包含该customerId的账单。
如上例所示,Bills使用.Find(id)进行过滤 - 只查看主键 - 我希望能够使用类似的方法来处理.Find(),但是在非关键字段上:CustomerId在这种情况下。
答案 0 :(得分:1)
或者,如果您确定只有一个实体与CustomerId匹配,则可以使用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,则会抛出异常。
答案 1 :(得分: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
编辑:Per Scott的评论调用FirstOrDefault()只返回一个结果。如果不存在,则返回null。 要做到这一点。
Dim bill = (From i in db.Bills
Where i.CustomerId = cId
Select i).FirstOrDefault()
If Not IsDBNull(bill) Then
/*Do Stuff*/
End If