我想改进我的代码。我能安全地把第一个例子改写成第二个吗?

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...)
}

--
PDF pdfNewWay = (from pdfobj in pdfDataContext.PDFs
                 where pdfobj.Id == pdfId
                 select pdfobj).SingleOrDefault();
if (pdfNewWay != null)
{
  // do something
}

--
编辑:
很抱歉没有说清楚。我的问题是直接获取pdf对象,而不必首先使用列表。我不想检查count是否大于0,因为它看起来不太好。

最佳答案

是的,看起来很安全。您还可以稍微简化查询:

PDF pdfNewWay = pdfDataContext.PDFs.SingleOrDefault(p => p.Id == pdfId);
if (pdfNewWay != null)
{
  // do something
}

singleordefault和firstordefault之间的唯一区别是,如果找到多个匹配项,singleordefault将引发异常,因此,除非您希望进行此检查,否则您最好坚持firstordefault。

08-26 00:04