簡體   English   中英

獲取帶有條件的子實體的實體對象(使用Dynamic Linq)

[英]Get an Entity Object with its child Entity with a condition (using Dynamic Linq)

這個問題是動態Lambda表達式Getting Count()屬性的延續

我問過我們是否可以將Count()方法放入動態lambda表達式中。 我可以使用Dynamic Expression API做到這一點。 提供的答案-xmojmr

但是最近我不得不實現一個動態Lambda表達式,以獲取帶有過濾數據的子實體的結果。

細節 :

我有一個父實體,其子實體已鏈接。 現在,當我從父實體獲取數據時,它也會返回一個帶有其子數據的數據集合。

根據我以前的要求,我必須對每個父記錄計算所有返回的子記錄。

我已經使用-


ParameterExpression cParam = Expression.Parameter(typeof(CPNDBase), "c");

NewExpression newExp = Expression.New(typeof(DTDataModel));

List bindings = new List();

MemberInfo memberInfo = typeof(DTDataModel).GetMember("FILE_COUNT")[0];

Dictionary paramExSymbols = new Dictionary();
paramExSymbols.Add("c", cParam);
Expression expression = System.Linq.Dynamic.DynamicExpression.Parse(null, "c.CPNDocs.Count()", paramExSymbols);
MemberBinding memberBinding = Expression.Bind(memberInfo, expression);

bindings.Add(memberBinding);

MemberInitExpression memberInitExpression = System.Linq.Expressions.Expression.MemberInit(newExp, bindings);

Expression> selector = (Expression>)BinaryExpression.Lambda(memberInitExpression, cParam);

var finalFilteredCPNData = filteredCPNData.AsQueryable().Select(selector);

這里c引用父結果集和c.CPNDocs.Count()嘗試對作為子實體結果集的CPNDocs中的記錄進行計數。

我可以使用Dynamic Expression API實現

現在,我最近的需求是修改以前的需求,並且需要為

c.CPNDocs.Where(a => a.L_STAT == true).Count()

在此之前,我需要根據其成員變量過濾其數據。 我嘗試使用動態表達式API,但Lambda表達式出錯。 無法建立。

有人可以幫我嗎?

我弄清楚了Dynamic Expression API是如何工作的。 正如我所說的,我對這些技術還不熟悉,但我仍在學習。

我必須實現c.CPNDocs.Where(d => d.L_STAT==true).Count()

我以為我們必須用字符串編寫一個表達式,而Dynamic Expression API會將其解析為一個真實的Expression,但是我錯了。 我們實際上必須告訴動態表達式API的 Parse方法我們想要做什么。

所以我將c.CPNDocs.Count()替換為

Expression expression = System.Linq.Dynamic.DynamicExpression.Parse(null, "c.CPNDocs.Count()", paramExSymbols);

c.CPNDocs.Where(L_STAT == true).Count() 請注意Where子句,它沒有LAMBDA表達式,而只有一個條件。 解析方法將聰明地理解我要執行的操作,並將其轉換為帶有動態引用的表達式,並生成與我正在尋找的表達式完全相同的表達式-

c.CPNDocs.Where(Param_0 => (Param_0.L_STAT == True)).Count()

其中Param_0是為CPNDoc(CPNDocs中的Record實例)創建的動態引用。 所以最終結果就是我想要的。

Xmojmr,您的最后答案也是該問題的答案。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM