有没有办法根据被检查的值是否为null来添加或删除LINQ to DB Query的一行?

时间:2010-03-29 15:50:22

标签: c# linq entity-framework entity

如果我有这样的查询:

String Category = HttpContext.Current.Request.QueryString["Product"].ToString();

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile
                                                           where file.Type_ID == 8
                                                                && file.Category == Category 
                                                           select file;

有没有办法制作这个LINQ查询,这样如果Category为null或为空,我就不会使用行file.Category == Category

2 个答案:

答案 0 :(得分:3)

除非您需要,否则不要添加where

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile
                                     where file.Type_ID == 8
                                     select file;

if(!string.IsNullOrEmpty(Category)) {
    pressReleases = pressReleases.Where(file => file.Category == Category);
}

这是有效的,因为LINQ查询可以与延迟执行组合,因此这个过滤器仍然是最终TSQL的一部分。

答案 1 :(得分:2)

这可能不是您想要的,但会呈现相同的结果:

String Category = HttpContext.Current.Request.QueryString["Product"].ToString();

IQueryable<ItemFile> pressReleases = from file in connection.ItemFile
                                     where file.Type_ID == 8
                                     && (string.IsNullOrEmpty(Category) || file.Category == Category)
                                     select file;