我使用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