2014-04-04 168 views
0

我在爲自定義業務對象搜索引擎編寫查詢時遇到問題,我正在編寫,我希望這裏有人能夠幫助我。我會盡我所能來形容這個問題。使用Linq和C比較對象的子對象列表#

下面是我使用的數據庫表,並通過實體框架6(EDMX)正在訪問:

Contract 
------------ 
ContractUID 
ContractDate 

ContractEntity 
------------- 
ContractEntityUID 
ContractUID 
EntityTypeID 

一個合同行可以有多個ContractEntity行,這樣一個合同可以參考多個EntityTypeIDs。

搜索用戶界面爲此搜索引擎提供了EntityTypeID列表以及其他搜索條件。預期引擎會返回一個引用搜索請求中任何EntityTypeID的合同列表,並與任何其他提供的條件(例如合同日期)匹配。

輸入搜索條件被包裹在一個對象是這樣的:

SearchCriteria 
{ 
    DateTime? ContractDate; 
    List<int> EntityTypeIDs; 
} 

這裏是我到目前爲止已經制定了一些示例代碼:

var d = entities.Contracts.Where(q => q.ContractUID > 0); 

if(search.ContractDate.HasValue) 
    d = d.Where(q => q.ContractDate == search.ContractDate); 

if(search.EntityTypeIDs != null) 
{ 
    d = d.Where(q => q.ContractEntities.Select(q2 => q2.EntityTypeID).Any(search. EntityTypeIDs.Select(i).Contains(… 
} 

我不清楚是什麼是如何將Comparing two lists using linq to sql中描述的課程應用於這種情況。似乎關鍵的區別是我需要比較兩個本身是其他對象屬性的列表。我在這裏錯過了很明顯的東西嗎任何幫助將不勝感激。

回答

1

最後凡在你的代碼語句是什麼,我側重於:

獲得具有至少1 ContractEntityEntityTypeId這是在列表中的Contracts

d = d.Where(q => 
    q.ContractEntities.Any(conEnt => 
     search.EntityTypeIDs.Contains(conEnt.EntityTypeId))); 
+1

非常感謝Will。我不知道爲什麼今天早上我無法解決這個問題。 – AEberhard

+0

我也有Any()和Contains()這些類型的問題 –