2013-04-05 171 views
2

我正在使用實體框架5.0,我有一個LINQ查詢的問題。我有以下方法接受一個整數值,然後傳遞給查詢。這工作正常。Linq To Entities Compare List Against List <int>

public IList<tblcoursebooking> GetStandardReport(int AttendanceID) 
{ 
    return _UoW.tblcoursebookingRepo.All 
      .Where(cb => cb.Attended.Equals(AttendanceID) 
      .ToList(); 

} 

不過,我需要改變的方法,以便它接受整數的列表,然後翻出其中出席等於任何整數列表的所有記錄。這樣

public IList<tblcoursebooking> GetStandardReport(List<int> AttendanceIDs) 
{ 
    return _UoW.tblcoursebookingRepo.All 
      .Where(cb => cb.Attended.Equals == any AttendanceIDs 
      .ToList(); 
} 

東西,我想但是,要做到儘量使用包含任何 LINQ關鍵字,出席是一個單一的值,而不是一個集合,唯一可用的屬性我點後是

的CompareTo, 的Equals, 的GetHashCode, 的GetType, GetTypeCode, 的ToString

請問有人能幫忙嗎?

謝謝你的時間。

回答

7

使用Contains功能,它將每個ID對給定匹配列表:

return _UoW.tblcoursebookingRepo.All 
     .Where(cb => AttendanceIDs.Contains(cb.Attended)) 
     .ToList(); 

一般來說,只要記住一個Where子句無非看中的foreach更嵌套IF語句(雖然很花哨)。它需要一個評估爲布爾值的表達式。如果你只有一個項目進行檢查,不使用LINQ,你會迅速拿出類似:

if(AttendanceIDs.Contains(myItem.Attended)) 

你可以把LinQ中的其中如上述條款以完全相同的方式,:)如果你」只要想想你會怎樣檢查一次,因爲LinQ會爲你做出迭代的部分。

更新

正如費薩爾的答覆中提到,WhereIn提供了類似的功能。還沒有使用它,但它似乎是一個更簡潔的方法。

雖然我沒有改變我的答案,因爲我覺得指出如何在Where條款中使用布爾值評估更重要,這也應該有助於您可能遇到的所有將來會遇到的類似問題,其中包括WhereIn將不相關。

但無論如何,你還可在這種特殊情況下使用WhereIn :-)

3

您需要使用其中。

public static void Main() 
{ 
    using (MyObjectContext context = new MyObjectContext()) 
    { 
    //Using method 1 - collection provided as collection 
    var contacts1 = 
     context.Contacts.WhereIn(c => c.Name, GetContactNames()); 

    //Using method 2 - collection provided statically 
    var contacts2 = context.Contacts.WhereIn(c => c.Name, 
     "Contact1", 
     "Contact2", 
     "Contact3", 
     "Contact4" 
    ); 
    } 
} 

'Contains()' workaround using Linq to Entities?