让我们说我在EF中有一个名为vw_Project
的类,其中包含类型为string的属性ProjectTitle
以及其他属性。我想运行一个有效的LINQ查询,它只查询我的结果中第一个记录的第一列(第一个" cell",类似于SqlCommand.ExecuteScalar
)。我可能写这样的东西:
string projectTitle = context.vw_Projects
.Where(p => p.ProjectID == projID)
.Select(p => p.ProjectTitle)
.FirstOrDefault();
问题是,我无法判断我的查询结果是否为零,或者是否只为该NULL
列获得了一个varchar
值的结果。
我总是可以查询整个对象来做出决定,然后将ProjectTitle
列提取到内存中的字符串变量中,但是我要查询一堆我不需要的列,这是一个糟糕的解决方案。这看起来像这样:
string projectTitle;
vw_Project project = context.vw_Projects
.Where(p => p.ProjectID == projID)
.FirstOrDefault();
if (project != null)
{
projectTitle = project.ProjectTitle;
}
else
{
throw new Exception("Invalid Project ID");
}
如何在不查询其他列或行的情况下进行此确定?
答案 0 :(得分:2)
如果您创建的内联匿名类型只包含您需要的属性,您仍然可以确定是否获得零结果或NULL
记录。
string projectTitle;
var result = context.vw_Projects
.Where(p => p.ProjectID == projID)
.Select(p => new { p.ProjectTitle })
.FirstOrDefault();
if (result != null)
{
projectTitle = result.ProjectTitle;
}
else
{
throw new Exception("Invalid Project ID");
}
如果查询得到结果,result
实例将不为null,无论内部ProjectTitle
属性是否为空。