2010-06-21 25 views
0

實現IN子句我有這兩種對象ILIST:如何在LINQ

class ProductionMachineType 
    { 
     string code { get; set; } 
     IEnumerable<string> ProductionToolsLink { get; set; } 
    } 

    class ProductionTools 
    { 
     string code { get; set; } 
    } 

我要尋找一個快速LINQ的方法,使我能夠查詢包含內包含至少一個ProductionToolsLinkIList<ProductionMachineType>ILIst<ProductionTools>

在SQL我會WITE是這樣的:

SELECT 
     * 
FROM 
     IList<ProductionMachineType> 
WHERE 
     IList<ProductionMachineType>.ProductionToolsLink IN ILIst<ProductionTools> 

有沒有辦法做到這一點?

回答

2

這將做到這一點,但我不能保證效率表現...

var output = machines.Where(machine => 
    machine.ProductionToolsLink 
    .Any(link => tools.Select(tool => tool.code).Contains(link))); 
+0

好的,這是righr的答案。有效的問題是已知的,但我無法解決我們不好的領域模型的任何不同的方法原因。 查詢LINQ也非常複雜。所以我想我會用幾個foreach來提高清晰度。 – AngeloBad 2010-06-21 13:21:45

5

包含方法可以幫助你:

var names = new string[] { "Alex", "Colin", "Danny", "Diego" }; 

var matches = from person in people 
     where names.Contains(person.Firstname) 
     select person; 
+0

不工作,如果「名」是另一個實體,它輸出「EXISTS」,而不是「IN」 – 2016-10-26 17:07:42