2014-02-24 63 views
1

這是我在這裏的第一篇文章,所以請溫柔!Lambda語句語法 - 幫助學習者

我是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。我已經在頂部使用了聲明,所以這不是問題。

我改變了我的代碼,但它與「無法隱式轉換類型十進制到布爾」錯誤。百分比是小數。

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); 

所以,我還是住了,感覺「不太擅長這個「!

+0

爲了響應您的更新,把「使用System.Linq;」在文件的頂部。你必須做ScaleTableList,而不是ScaleTable。 –

+0

百分比==。兩個等號。並在最後調用ToList()來擺脫該錯誤。 –

+0

解釋... ==比較。 =賦值,所以表達式的結果是一個小數。所有的linq查詢都返回一個可枚舉的,而不是一個列表。 –

回答

0

對於那些來訪的這個問題,我設法解決它自己使用的讚賞幫助那些迴應。我結束了代碼是:

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

你可以簡單地做:

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

如果它應該只返回一個記錄,然後:

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