Linq从数据库表中选择List中的匹配属性

时间:2017-04-03 07:30:58

标签: c# .net linq

我有一个列表,其中包含以下类的记录,类似于此

  public class TestRecord
  {
     public int RecordsId{get;set;}
public string Name{get;set;}
-- and more such properties.

  }

现在我有从linq访问的数据库表,其中包含RecordId列,这些值将匹配上面列表中的RecordId值。

  var result=from p in _context.Details

但是我想我可以在这个linq查询中执行where / contains并为其提供一个匹配RecordId列表的子句

 List<TestRecord> records -- this has let's say 100 records.

简单地这样做不起作用,因为linq无法与通用List

连接
    var finalresult = from p in context.details
                      join a in records on p.recordId equals a.recordId

使用Linq的任何解决方案?

4 个答案:

答案 0 :(得分:1)

您可以使用Contains()之类的

var finalresult = context.details.Where(d => records.Contains(d.recordId));

答案 1 :(得分:1)

您可以像这样使用Any

var finalresult = context.details.Where(d => records.Any(r=>r.recordId == d.recordId));

答案 2 :(得分:1)

我在vb.net上有一个解决方案。我想你翻译没问题。

我的班级TestRecord:

Public Class TestRecord
Private _RecordsID As Integer
Private _Name As String
Public Property RecordsID As Integer
    Get
        Return _RecordsID
    End Get
    Set(value As Integer)
        _RecordsID = value
    End Set

End Property
Public Property Name As String
    Get
        Return _Name
    End Get
    Set(value As String)
        _Name = value
    End Set

End Property

结束班

然后,你的主要Sub(或其他任何东西)

   Dim records As New List(Of TestRecord)
    Dim context As New DataTable()
    context.Columns.Add("DataTableRecordID")
    context.Columns.Add("Name")
    For i As Integer = 0 To 100
        records.Add(New TestRecord With {
            .RecordsID = i,
            .Name = "TestUser" & i.ToString()})


        context.Rows.Add(i, "TestUser" & i.ToString())
    Next


    Dim FinalResult = From p In context.AsEnumerable()
                      Join a In records.AsEnumerable() On p.Field(Of String)("DataTableRecordID") Equals a.RecordsID

我在开始时有一个小循环来创建一些数据行和数据表。我猜你在“context”=&gt;中使用数据表(或数据集) context.details示例。

在linq查询中,您可以在数据表中设置字段,通用列表(TestRecord)将为您提供所需的列(a.RecordID)。

我的英语不好x)

答案 3 :(得分:0)

 var s = from p in tests where names.Contains(p.Name) select p;