2011-04-15 35 views
2

我需要多次調用相同的LINQ查詢,這些查詢只在「where」子句中具有不同的元素。我不想一遍又一遍地重複LINQ查詢,而是希望將這些元素傳遞給一個查詢,但我的腦海裏正在如何做到這一點。刪除LINQ查詢之間的重新鏈接

現在我的基地LINQ查詢看起來是這樣的:

return from a in _repository.GetApps() 
         join set in _repository.GetSettings() on a.id equals set.application_id 
         join type in _repository.GetSettingsTypes() on set.setting_type_id equals type.id 
         join ent in _repository.GetEntities() on a.entity_id equals ent.id 
         where ent.ROW_ID == app && set.application_id == id && (set.setting_type_id==81 || set.setting_type_id==82 || set.setting_type_id==83) 
         orderby set.application_id, type.ordinal 
         select new Settings { app_name = a.name, data_type = type.data_type, setting_name = type.name, setting_description = type.description, setting_value = set.setting_value, entity_name = ent.name, entity_num = ent.ROW_ID }; 

的「where」子句只是列出的ID設置類型。其他調用將簡單地使用更多或更少設置ID替換「where」子句,然後將其返回到視圖。我如何動態替換「where」子句或設置ID?我可以簡單地將字符串或數組分配給第二個「& &」之後的設置列表(這似乎不起作用)?或者Lambdas會在這裏幫助我(我也無法讓它工作)?謝謝!

回答

2

您可以使用數組與Contains()查詢相結合:

var settingTypeIds = new[] { 81, 82, 83 }; 

return from a in _repository.GetApps() 
.. 
where ent.ROW_ID == app 
     && set.application_id == id 
     && settingTypeIds.Contains(set.setting_type_id) 
+0

這看起來非常有前途。我會試一試。謝謝! – ewomack 2011-04-15 13:49:30

0

你必須使用查詢語法?你可以使用LINQ擴展方法並將不同的lambda表達式傳入Where方法嗎?

+0

可能,但我不知道如何工作。不過,我會研究它。謝謝! – ewomack 2011-04-15 13:49:10