我想让我的代码变得更好.我可以安全地将第一个例子重写到第二个例子吗?
IQueryable<PDF> pdfList = (from pdfobj in pdfDataContext.PDFs
where pdfobj.Id == pdfId
select pdfobj);
if (pdfList.Count() > 0)
{
PDF pdfOldWay = pdfList.FirstOrDefault();
pdfOldWay. // do something. (pdfOldWay can't be null here...)
}
Run Code Online (Sandbox Code Playgroud)
-
PDF pdfNewWay = (from pdfobj in pdfDataContext.PDFs
where pdfobj.Id == pdfId
select pdfobj).SingleOrDefault();
if (pdfNewWay != null)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
-
编辑:
对不起,不清楚.我的问题是直接获取PDF对象而不必先使用列表.我不想检查计数是否大于0,因为它看起来不太好.
Mar*_*kXA 10
是的,这看起来很安全.您还可以稍微简化查询:
PDF pdfNewWay = pdfDataContext.PDFs.SingleOrDefault(p => p.Id == pdfId);
if (pdfNewWay != null)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
SingleOrDefault和FirstOrDefault之间的唯一区别是,如果找到多个匹配项,SingleOrDefault将抛出异常,因此除非您需要此检查,否则您可以坚持使用FirstOrDefault.
您应该在第二种情况下使用FirstOrDefault,因为如果有多个项目,SingleOrDefault将抛出异常.你觉得可以吗?
另一方面,如果你想保证某个id只有一个pdfobject比使用SignleOrDefault更好.
| 归档时间: |
|
| 查看次数: |
19089 次 |
| 最近记录: |