2017-04-03 47 views
1

匹配属性选择我有以下类的记录列表是这样的的LINQ从数据库表格,其中从列表

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

    } 

现在我有我从其中包含的recordId列LINQ访问数据库表,值它将与上面的List中的RecordId值匹配。

var result=from p in _context.Details 

但是我想我可以做这个LINQ查询哪里/载,并为其提供一个条款,从列表中

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

简单地做匹配的recordId这并不为LINQ可以”工作t加入泛型列表

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

这个使用Linq的任何解决方案?

+0

'_context.Details'是一个'DataTable'? – Pikoh

+0

它是数据库中的表 –

+0

您可以在LINQ中使用where子句。如果我已经正确理解了你的问题,那么也只能使用100个记录。提供一些关于什么会在你的where子句 – A3006

回答

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 

末级

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

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)。

Sry for my bad english x)

+1

thnx!使用AsEnumerable工作加入通用列表。 –

+0

嗨Mandar,很高兴听到这一点。请注意字段的定义。我犯了一个错误。在Join语句中(在p.field上(OF字符串,请在这里使用整数,因为您将ID定义为整数)。 – rkn53940

1

您可以使用Contains()

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

记录不仅是int /字符串列表的更多信息。它也有其他属性,这就是为什么这个解决方案不起作用。我需要过滤记录对象中的实体的RecordId属性。 –

+0

@MandarJogalekar,那么什么是'_context.Details'呢?为此提供了定义 – Rahul

+1

在这种情况下,创建一个要过滤的ID列表,recordIds = records.select(r => r.recordId).tolist(),然后从数据库中运行包含查询对此 – uk2k05

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

您可以使用Any这样的:

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