我使用LINQ到實體檢索從DB我的記錄。下面的函數在一個方法中。方法有一些參數(參數)類基團,datefrom,dateto,地點,狀態,SEARCHTEXT等等,等等LINQ方法語法 - 如何實現動態的LINQ語句
的整體思路是,如果這些參數不爲空或null,則實現LINQ statments。我正在做的方式是檢查是否有價值。如果它有價值,那麼我通過例如a.no_group = group如果它沒有一個值,那麼我會傳遞一個像a.id!= - 1這樣的語句,這總是正確的。
問題: 我的意思是我不開心,在每個語句通過像這始終是真正的「a.id = -1!」。我使用這個,因爲我必須在那裏放置一個值。但我不喜歡這樣做...(它的工作原理!)
問題: 問題是:這種正確的做法? 1-可以用別的東西替換a.id!= -1嗎?
2 - 如果你看到整個LINQ語句是因爲語言的檢查重複。正如你看到最後的 linq語句檢查語言「荷蘭語」或「法語」......如何避免重複?
3-我檢查當前日期(datetime.now)是否date_begin和DATE_END之間。這是正確的方式...
整個代碼工作正常,但我覺得我複雜,可以簡單得多的代碼...
怎麼會呢?
if (Language == ConfBouwHelper.LanguageEnum.French)
{
//FRENCH RECORDS
listAgendaItems = dc.agenda.Where(a =>
((String.IsNullOrEmpty(group)) ? (a.id != -1) : (a.no_group == group))
&& ((activityType.Equals("ALL")) ? (a.id != -1) : (a.type_manifestation == activityType))
&& ((String.IsNullOrEmpty(dateFrom)) ? (a.id != -1) : (a.date_debut.Value >= dateFrom))
&& ((String.IsNullOrEmpty(dateTo)) ? (a.id != -1) : (a.date_debut.Value <= dateTo))
&& ((String.IsNullOrEmpty(place)) ? (a.id != -1) : (a.emplacement.Contains(place)))
&& ((String.IsNullOrEmpty(state)) ? (a.id != -1) : (a.cd_prov == state))
&& ((String.IsNullOrEmpty(searchText)) ? (a.id != -1) : (a.libelle_activite.Contains(searchText)))
&& ((a.date_begin_display.HasValue ? DateTime.Now >= a.date_begin_display.Value : a.id != -1) &&
(a.date_end_display.HasValue ? DateTime.Now <= a.date_end_display.Value : a.id != -1))
&& (a.langue == "FRENCH" || a.langue == "B")).ToList<agenda>(); //GET FRENCH
}
else
//DUTCH RECORDS
{
listAgendaItems = dc.agenda.Where(a =>
((String.IsNullOrEmpty(group)) ? (a.id != -1) : (a.no_group == group))
&& ((activityType.Equals("ALL")) ? (a.id != -1) : (a.type_manifestation == activityType))
&& ((String.IsNullOrEmpty(dateFrom)) ? (a.id != -1) : (a.date_debut.Value >= dateFrom))
&& ((String.IsNullOrEmpty(dateTo)) ? (a.id != -1) : (a.date_debut.Value <= dateTo))
&& ((String.IsNullOrEmpty(place)) ? (a.id != -1) : (a.emplacement.Contains(place)))
&& ((String.IsNullOrEmpty(state)) ? (a.id != -1) : (a.cd_prov == state))
&& ((String.IsNullOrEmpty(searchText)) ? (a.id != -1) : (a.libelle_activite.Contains(searchText)))
&& ((a.date_begin_display.HasValue ? DateTime.Now >= a.date_begin_display.Value : a.id != -1) &&
(a.date_end_display.HasValue ? DateTime.Now <= a.date_end_display.Value : a.id != -1))
&& (a.langue == "DUTCH" || a.langue == "B")).ToList<agenda>(); //GET DUTCH
}
哇...價格高...感謝這麼多。 – ethem 2011-05-02 10:20:41
嗨丹尼爾,我發佈了一個基於你的建議的相關問題。你能諮詢一下嗎?這是鏈接:http://stackoverflow.com/questions/5857261/linq-method-syntax-can-not-convert-iqueryable-to-bool – ethem 2011-05-02 12:45:27
@mesut:請參閱我的回答你的新問題**和無視所有其他**,因爲他們錯了...... – 2011-05-02 12:53:19