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

时间:2012-03-29 05:59:33

标签: linq entity-framework linq-to-entities

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

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

5 个答案:

答案 0 :(得分:5)

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

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

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

  • Single - 如果完全一个结果
  • ,则会失败
  • SingleOrDefault - 如果有多个结果则失败,如果没有结果则返回
  • First - 如果没有结果则失败,返回第一个
  • FirstOrDefault - 如果没有结果,则返回null,或许多
  • 中的第一个
  • Last - 如果没有结果则失败,返回最后一个
  • LastOrDefault - 如果没有结果,则返回null,或许多
  • 中的最后一个

在每种情况下,“失败”表示“抛出异常”。 (IIRC总是InvalidOperationException,至少在LINQ to Objects中,但我可能是错的。)

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

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

答案 1 :(得分:0)

return objDatabase.FAPARs.FirstOrDefault(f => f.PARTY_CODE.Equals("P003")).PARTY_NAME 

答案 2 :(得分:0)

尝试

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

 return objDatabase.FAPARs.OfType<FAPAR>()
                .Where(f => (f.PARTY_CODE == PartyCode && f.COMP_NO == ComCode))
                .Select(f => f.PARTY_NAME).SingleOrDefault();