如何将iqueryable <string>转换为linq中的字符串?

sag*_*ani 0 linq linq-to-entities entity-framework

我有以下代码片段.其中我只想将PartyName作为字符串返回.但我得到错误:"不能隐含转换类型'System.Linq.Iqueryable到字符串"如果我想只返回字符串然后该怎么办?请帮我.

return objDatabase.FAPARs .Where(f => (f.PARTY_CODE == "P003")) .Select(f => f.PARTY_NAME);

Jon*_*eet 5

An IQueryable<string>表示可以返回任意数量的字符串的查询.你想要一个字符串 - 所以你需要决定在各种情况下做什么:

  • 如果查询没有结果,您希望发生什么?
  • 如果查询有一个结果,您希望发生什么?(我假设这很简单:)
  • 如果查询有多个结果,您希望发生什么?

允许您确定所有这些的方法集是:

  • Single-失败,如果没有正好一个结果
  • SingleOrDefault - 如果有多个结果则失败,如果没有结果则返回null
  • First - 如果没有结果则失败,返回第一个
  • FirstOrDefault - 如果没有结果,则返回null,或者返回第一个结果
  • Last - 如果没有结果则失败,返回最后一个
  • LastOrDefault - 如果没有结果,则返回null,或者返回多个结果

在每种情况下,"失败"意味着"抛出异常".(IIRC总是如此InvalidOperationException,至少在对象的LINQ中,但我可能是错的.)

因此,如果您使用必须存在的ID进行查询(即如果不存在则会出现错误)则Single可能是合适的.如果您使用可能不存在的ID进行查询,请使用SingleOrDefault并检查返回值是否为空.如果您没有通过ID查询,您可能想要使用FirstOrDefault或只是迭代结果.

(注意,默认值null是由于这是一个返回字符串的查询,而字符串是一个引用类型.通常它是元素类型的默认值 - 所以如果你有一个IQueryable<int>,则返回的默认值为0.)