我有一个列表,其中包含以下类的记录,类似于此
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的任何解决方案?
答案 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;