Linq有条件的包括

时间:2015-02-16 00:00:37

标签: c# linq

我正在努力寻找解决此问题的最有效方法:

我正在从数据库中检索文件。如果FileSize小于10MB,我想包含FileContent,否则将保留为null。我现在的代码是:

var z = QuerySet.AsQueryable();

File f = z.FirstOrDefault(item => item.Id == id && item.FileSize >= 1024 * 1024 * 10);

if (f != null) return f;

return z.Include(a => a.FileContent)
    .FirstOrDefault(item => item.Id == id);

所以,我查询是否是我的文件(匹配的Id)以及它是否是一个大文件。如果是这样,请返回该文件。否则再次执行查询,但包括文件内容。有没有更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

怎么样:

var item = z.Select(x => new {
        File = x,
        Content = x.FileSize >= sizeLimit ? null : x.FileContent
    }).FirstOrDefault(x => x.File.Id == id);

return item.File;

应该成功,但你必须通过查看生成的SQL来确认。