我尝试将查询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