2010-12-07 59 views
2

選擇多個ID的(主鍵),我有一個整數列表LINQ的從整數列表

''# VB 
Dim ResultIDsas List(Of Integer) = new List(Of Integer) 

// C# 
List<int> ResultIDs= new List<int>(); 

我通過一個Lucene讀的結果循環添加到列表中。

''#VB 
While (i <= (page * 10) AndAlso i < HitCollection.Length) 
    Dim document As Document = HitCollection.Doc(i) 
    Dim _event As New Domain.[Event] 

    ResultIDs.Add(document.[Get]("ID")) 
    i += 1 
End While 

// C# 
while ((i <= (page * 10) && i < HitCollection.Length)) { 
    Document document = HitCollection.Doc(i); 
    Domain.Event _event = new Domain.Event(); 

    ResultIDs.Add(document.Get("ID")); 
    i += 1; 
} 

現在,這裏是哪裏的問題用武之地。

說我的整數列表是[1,5,6,19,22]

會是什麼一個LINQ(拉姆達)expresion樣子,當我需要查詢我的服務?

''# VB 
EventService.QueryEvents().Where(Function(e) (e.ID = 1)) 

// C# 
EventService.QueryEvents().Where((System.Object e) => (e.ID == 1)); 

// Obviously these will simply grab ID of "1" which is not what we want. 

回答

1

我在這裏猜測,但這似乎是你在之後。

''# VB.NET 
EventService.QueryEvents().Where(Function(e) (ResultIDs.Contains(e.ID)) 

而在C#:

// C# 
EventService.QueryEvents().Where((System.Object e) => (ResultIDs.Contains(e.ID))); 
+0

真棒感謝。我嘗試了另一種方式,因爲我的大腦並不能正常工作lambda,但是`e.ID.Contains(ResultIDs)` - 這顯然不起作用。 – 2010-12-07 01:19:52

+0

超酷。這就是Linq-to-SQL的工作方式,這是從SQL中的「Field IN(1,2,3)」轉換爲Linq中的「myList.Contains(Field)」的過渡。還有一件事--Contains()是IEnumerable()的一個擴展,所以如果這樣做不方便,我認爲你不需要依賴你的`ResultIDs`集合來成爲IList。 – mattmc3 2010-12-07 01:41:03

2
EventService.QueryEvents().Where(e => list.Contains(e.ID)); 

這會產生SELECT相當於... WHERE e.ID在(1,5,...)