c#LINQ:如何检索单个结果刚接触linq,使用linq检索单个结果最简单的方法是什么?例如,我的查询varquery=fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectc.co2Target;它应该只返回一个具有双精度值的字段。如何将其从查询中提取出来?过去,我使用过ExecuteScalar。我怎么能用linq做到这一点?我想保留其数据类型更新:这就是我现在所在的位置。问题是我在这里运行的测试查询返回4而不是3.75varquery=(fromaindb.LUT_ProductInfoswherea.flavor=="ClassicCoke"&&a.Container=="Can"selectnew{a.co2High})。单身的();双MyVar=query.co2High.Value;我认为你的意思是返回一个值,而不是记录?您需要像这样选择新的{}:varquery=fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectnew{c.co2Target};然后,如果您只想检索单个记录并且:varquery=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectnew{c.co2Target})。单身的();检索将按如下方式完成:varquery=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectnew{c.co2Target}).Single();双MyVar=query.co2Target;使用.SingleOrDefault()或.SingleOrDefault()扩展方法。varquery=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectc.co2Target).Single();使用First()或FirstOrDefault()varquery=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectc.co2Target).FirstOrDefault();如果你知道只有一个结果,或者如果你想如果多个结果失败,只使用Single()或SingleOrDefault()。您可以使用Single扩展方法:varresult=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectc.co2Target).Single();其他相关扩展方法有SingleOrDefault、First和FirstOrDefault。Single和First之间的区别在于,如果查询产生多个结果,Single将抛出异常。如果查询未返回任何结果,OrDefault变量将返回null,而如果不存在任何结果,Single和First将抛出异常。如果您使用的是EntityFramework3.5,它不支持Single,因此您必须使用First。另外值得注意的是,您的原始代码会生成IQueryable,这意味着在您评估结果之前它不会实际执行查询。使用这些扩展方法中的任何一种都将强制查询立即运行。msdn:SingleOrDefault使用Single()或SingleOrDefault()方法获取结果另请检查:默认扩展方法如果查询始终只返回一个元素作为结果,则使用SingleOrDefault();如果查询结果是多个元素,则抛出异常。(来自db.productInfo中的c,其中c.flavor=="ClassicCoke"&&c.container=="Can"选择c.co2Target)。SingleOrDefault();如果您的结果有多个元素并且您需要任何元素,请使用FirstOrDefualt()。(来自db.productInfo中的c,其中c.flavor=="ClassicCoke"&&c.container=="Can"选择c.co2Target)。FirstOrDefault();stringstr=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="Can"selectc.co2Target).Single().columnName;我更喜欢SingleOrDefault(),如果没有返回任何内容,它不会抛出异常。MSDN参考,以便您可以检查针对这种情况的安全预防措施。以上就是C#学习教程:c#LINQ:Howtoretrieveallthecontentsharedbyasingleresult。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——varquery=(fromcindb.productInfowherec.flavor=="ClassicCoke"&&c.container=="可以"选择c.co2Target).SingleOrDefault();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
