【发布时间】: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