2014-02-17 76 views
0

我有一個名爲batchesstring array,它包含batchnames。我想將它與Batch entity進行比較,並獲取與實體的batchName字段相匹配的所有記錄。我正在使用Entity Framework 6使用LINQ比較實體和數組使用LINQ

class Batch 
{ 
    int batchId { get; set;} 
    string batchname { get; set;} 
    string info { get; set;} 
    DateTime date { get; set;} 
} 

現在我使用foreach

foreach(var item in batches) 
{ 
    var res=opt.Batch.Where(i=>i.batchname==item).FirstOrDefault(); 
    batchlist.Add(res); 
} 

如何與LINQ做到這一點做這樣的不使用foreach

回答

4

可以更換整個foreach循環,並保持2線的代碼,用以下內容替換i.batchname==item

batches.Contains(i.batchname) 

然後,您可以一次將所有項目添加到列表中,因爲這將返回名稱位於批次數組中的所有批次。

變量資源將返回一個枚舉,其然後可以被循環周圍添加到您的列表,或者您可以使用一個列表,允許的AddRange()

希望這有助於。

+0

謝謝像char米 – ElectricRouge

0

像下面的東西將有所幫助。

foreach(var item in batches) 
{ 
    batchlist.AddRange(opt.Batch.Where(i=>i.batchname.Any(item => i.batchname==item)).ToList()); 
} 
0

這將讓你批的對象的列表:

var resultList = opt.Batch.Join(batches, left => left.batchname, right => right, (left, right) => left 

改變了過去「左」到「右」,會給你批名稱的字符串列表

var resultList = opt.Batch.Join(batches, left => left.batchname, right => right, (left, right) => right 
2

怎麼樣的東西:

var batchlist = opt.Batch.Where(x => batches.Contains(x.batchname)).ToList();