使用db查找除主键之外的其他内容

时间:2012-08-12 17:05:24

标签: vb.net asp.net-mvc-3

我在互联网上搜索了这个问题的答案但没有运气。我有一个模型存在于使用实体框架创建的数据库中,可以通过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在这种情况下。

2 个答案:

答案 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
相关问题