【问题标题】:Lambda statement syntax - help for a learnerLambda 语句语法 - 对学习者的帮助
【发布时间】:2014-02-25 18:56:35
【问题描述】:

这是我在这里的第一篇文章,所以请温柔!

我是 c# 新手,因此对 lambda 非常陌生。我正在尝试构造一个 lambda 语句,但我弄错了,因为它没有出错但没有返回任何值。

我要做的是从数据库选择所在的表中选择一些信息

SELECT slope
FROM   scaleTable
WHERE  percentage = aPercentagePassedIn

这应该只返回一条记录。

我们正在使用实体框架。

这是我所拥有的,但正如我所说,我知道这是错误的:

List<ScaleTable> maxSlope = ScaleTableList.Where(a => a.Slope.Equals(ScaleTableList.Where(b => b.Percentage.Equals(aPercentagePassedIn)))).ToList();

感谢您的帮助。

更新 1

非常感谢您对@m1Lb4nKs 和@Habib 的帮助。我已经尝试了所有选项,但由于某种原因,当我将其与表名一起使用时,它不喜欢 SingleOrDefault 或 Where(错误是表不包含 SingleOrDefault 或 Where 的定义):

var result = ScaleTable.SingleOrDefault(r => r.Percentage == aPercentagePassedIn);

var result = ScaleTable.Where(x => x.Percentage = aPercentagePassedIn).Select(y => y.slope).FirstOrDefault();    

有什么想法吗?

更新 2

好的,谢谢@Millie。我已经在顶部使用了 using 语句,所以这不是问题。

我将我的代码更改为这个,但它出现“无法将十进制类型隐式转换为布尔值”的错误。百分比是小数。

List<ScaleTable> maxSlope = ScaleTableList.Where(x => x.Percentage = aPercentagePassedIn).Select(y => y.slope).FirstOrDefault();

所以我尝试了这个但得到一个错误,基本上说它无法将类型 ScaleTable 转换为 System.Collections.Generic.List

List<ScaleTable> maxSlope = ScaleTableList.SingleOrDefault(r => r.Percentage == aPercentagePassedIn);

所以,我还是觉得“不太擅长这个”!!

【问题讨论】:

  • 响应您的更新,输入“使用 System.Linq;”在文件的顶部。你必须做 ScaleTableList,而不是 ScaleTable。
  • 百分比 ==。两个等号。并在最后调用 ToList() 以消除该错误。
  • 解释... == 比较。 = 赋值,所以表达式的结果是小数。并且所有 linq 查询都返回一个 ienumerable,而不是一个列表。
  • 再次感谢@Millie Smith。我最终使用这段代码解决了它,这正是我想要实现的,快乐的兔子:) decimal maxSlope = ScaleTableList.Where(x => x.Percentage == aPercentagePassedIn).Select(y => y.Slope).FirstOrDefault( );我应该发现 ==,我确实知道其中的区别,但感谢您指出。我已经看这个太久了!
  • 没问题@Isis。顺便说一句,如果你正在寻找 maxSlope,你会想要调用 Max 而不是 FirstOrDefault,对吧?

标签: c# entity-framework-4 lambda


【解决方案1】:

你可以这样做:

ScaleTableList.Where(x => x.percentage = aPercentagePassedIn).Select(y => y.slope).ToList()

如果它应该只返回一条记录,那么:

ScaleTableList.Where(x => x.percentage = aPercentagePassedIn).Select(y => y.slope).FirstOrDefault()

【讨论】:

    【解决方案2】:

    对于那些访问这个问题的人,我设法通过回答者的感谢帮助自己解决了这个问题。我最终得到的代码是:

    decimal maxSlope = ScaleTableList.Where(x => x.Percentage == aPercentagePassedIn).Select(y => y.Slope).FirstOrDefault(); 
    

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      相关资源
      最近更新 更多