2015-04-30 67 views
0

簡體中文,我有一個實體,我們稱它爲「Foo」,在我的數據庫中幾次。如何執行查詢包括哪裏?

我現在想根據他們的FooCode(用戶選擇FooCode s列表)選擇某些Foo s。

比方說,我有 S,他們三個具有FooCode「20」。 我想返回Foo s的列表,其中FooCode「20」;預期結果是大小爲3的Foo s的列表。

以下LINQ的表達中工作完全正常,但它選擇所有小號執行前的Where(請糾正我,如果我錯了)。因此,大量的Foo這可能不是最快的解決方案。

// user defined list of FooCodes - now containing: "20", "20", "20" 
List<string> selectedFooCodes = ... 
List<Foo> = _transactionalDataAccess 
       .Query<Foo>(query => query) 
       .Where(entity => selectedFooCodes.Contains(entity.FooCode)).ToList(); 

我想一個LINQ表達式如下面將選擇更快,因爲WhereQuery後直接。無論如何,它會返回一個Foo s的列表,其大小爲五個。據我所知,它應該選擇完全相同的上述查詢。

// user defined list of FooCodes - now containing: "20", "20", "20" 
List<string> selectedFooCodes = ... 
List<Foo> = _transactionalDataAccess 
       .Query<Foo>(query => query 
       .Where(entity => selectedFooCodes.Contains(entity.FooCode))); 

這是爲什麼?有人能告訴我我錯過了什麼嗎?上述LinQ返回完全相同:

_transactionalDataAccess 
       .Query<Foo>(query => query); 

爲什麼Where沒有什麼區別? 還是有更快的記號我不知道?

對不起,如果這是之前問。我搜索了StackOverflow上的LinQ問題,但還沒有找到類似的問題。我不得不承認,我決定提出自己的問題,因爲它比閱讀和理解所有現有問題所需的時間少。

+0

你能張貼關於你的代碼的詳細信息的對象?什麼是_transactionalDataAccess的類型? –

+0

@RicardoSilva它是'ITransactionalDataAccess'類型,它縮小到'IQueryDataAccess'。對不起,這是我們公司實習生框架中的一件事。它基本上只代表與(Oracle)數據庫的接口。希望有所幫助。它甚至重要嗎? – Alex

+0

如果不知道'_transactionalDataAccess'對象是什麼,就不可能回答這個問題。 – Hogan

回答

1

我不知道你的組件訪問數據庫的工作方式。但它似乎以與Linq to Sql或EF類似的方式工作。 你的第一個代碼似乎做這樣的事情:

var searchContent = (from a in dataModel.TableA 
        select a) 
        .ToList() 
        .Where(a => a.ID == 22); 

現在,第二個例子,似乎做這樣的事情:

var searchContent = (from a in dataModel.TableA 
        select a) 
        .Where(a => a.ID == 22) 
        .ToList(); 

注意,從只會產生一個可查詢(它的意志不做搜索),Where方法只增加這個查詢。但是,在這一點上,查詢還沒有執行。 查詢將僅在ToList方法中有效執行(因此它將只搜索ID等於22的條目,並將其返回到列表。

第一個例子選擇ALL itens,安裝對象到List(現在是在計算機的內存),並從列表中只需要ID號爲22