我嘗試將查詢1重新分解爲查詢2語法...因爲更具可讀性等 像「group,begindate,enddate和excludeManifestatie」這樣的參數是通過參數傳遞的(方法PARMS)..我檢查他們是否爲空白或不)通過與否,所以我可以建立我的LINQ的動態SQL。Linq方法語法 - 無法將IQueryable轉換爲Bool
但我得到的錯誤在查詢1,當我使用....的HasValue檢查。它說: 「無法隱式轉換類型‘System.Linq.IQueryable’到‘布爾’」
查詢2正常工作,這就是我想要的東西,但它複雜的語法,所以我需要ŧ o糾正查詢1語法。
查詢1:
((String.IsNullOrEmpty(group)) ? (a.id != -1) : (a.no_group == group))
&& ((group.Equals("990") || (group == string.Empty)) ? (!a.displaylocal.HasValue || a.displaylocal.Value == false) : (a.id != -1))
&& ((a.begindate.HasValue ? DateTime.Now >= a.begindate.Value : a.id != -1) &&
(a.enddate.HasValue ? DateTime.Now <= a.enddate.Value : a.id != -1))
&& ((String.IsNullOrEmpty(excludeManifestatie)) ? (a.id != -1) : (a.type_manifestation != excludeManifestatie))
新/更好的方式來寫:
QUERY 2:
var query = dc.agenda.AsQueryable();
if (!string.IsNullOrEmpty(group))
query = query.Where(a => a.no_group == group);
if (group.Equals("990") || group.Equals(string.Empty))
if ((query.Where(a => a.displaylocal.HasValue))) //Gives ERROR
query = query.Where(a => a.displaylocal >= DateTime.Now);
if (!string.IsNullOrEmpty(excludeManifestatie))
query = query.Where(a => a.type_manifestation != excludeManifestatie);
if (query.Where(a => a.begindate.HasValue)) //Gives ERROR
query = query.Where(a => a.begindate <= DateTime.Now);
if ((query.Where(a => a.enddate.HasValue))) //Gives ERROR
query = query.Where(a => a.enddate >= DateTime.Now);
@Answerers:** **請停止發佈廢話改變if(where)'部分,就像'if(any/count/singleordefault)',因爲這完全是另一回事。請閱讀他的問題,特別是他的原始查詢! – 2011-05-02 12:54:46
@丹尼爾你是對的,我們肯定錯過了這個問題的一些東西,但那東西可能在右上角:) – 2011-05-02 13:11:23