繁体   English   中英

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

[英]Linq select from database table where matching property from List

我有一个列表,其中包含以下类的记录,就像这样

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

  }

现在我有从linq访问的数据库表,其中包含RecordId列,这些值将匹配上面List的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的任何解决方案?

你可以使用Contains()类的

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

您可以像这样使用Any

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

我在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”=> context.details示例中使用了datatable(或Dataset)。

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

为我的坏英语而烦恼x)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM