我想構建一個lambda表達式,其中包含兩個賦值(如下面所示),然後可以傳遞給Queryable.Select()方法。在Select()查詢中使用的Lambda表達式
我想將一個字符串變量傳遞給一個方法,然後使用該變量來構建lambda表達式,以便我可以在LINQ Select查詢中使用它。
我的理由是,我有一個SQL Server數據源與許多列名稱,我正在創建一個圖表應用程序,允許用戶選擇,例如通過鍵入列名稱,他們想要的數據的實際列在我的圖表的y軸上查看,x軸始終是DateTime。因此,他們基本上可以根據DateTime值(它是一個數據倉庫類型的應用程序)選擇哪些數據。
我已經,例如,存儲在檢索到的數據,並且因此一類使用盡可能的圖表源:
public class AnalysisChartSource
{
public DateTime Invoicedate { get; set; }
public Decimal yValue { get; set; }
}
我已經使用(純粹experimentaly)構建的表達式樹Where子句的字符串值,並且工作正常:
public void GetData(String yAxis)
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
var data = this.FunctionOne().AsQueryable<AnalysisChartSource>();
//just to get some temp data in....
ParameterExpression pe = Expression.Parameter(typeof(AnalysisChartSource), "p");
Expression left = Expression.MakeMemberAccess(pe,
typeof(AnalysisChartSource).GetProperty(yAxis));
Expression right = Expression.Constant((Decimal)16);
Expression e2 = Expression.LessThan(left, right);
Expression expNew = Expression.New(typeof(AnalysisChartSource));
LambdaExpression le = Expression.Lambda(left, pe);
MethodCallExpression whereCall = Expression.Call(
typeof(Queryable), "Where", new Type[] { data.ElementType },
data.Expression,
Expression.Lambda<Func<AnalysisChartSource, bool>>(e2, new ParameterExpression[] { pe }));
}
}
不過......我已經嘗試了Select語句類似的辦法,但就是無法得到它的工作,因爲我需要選擇()來填充X和AnalysisChartSource類的Y值如下所示:
.Select(c => new AnalysisChartSource
{ Invoicedate = c.Invoicedate, yValue = c.yValue}).AsEnumerable();
我怎麼可以建立這樣一個表達樹......或者......可能更重要的是......有一種更簡單的方法,我完全錯過了嗎?
喬恩很棒的主意。我會給你100票的解決方案! :-) – gsharp 2010-04-27 08:46:40
喬恩,輝煌!非常感謝!我同意gsharp,一個好主意! - 反射器是我的新朋友:-)再次感謝 – jameschinnock 2010-04-27 09:22:23
@GSharp,我會幫你:+1。 – Steven 2010-04-27 10:21:49