簡體   English   中英

c#如何在返回字符串的表達式中評估compareTo(..)

[英]c# How to evaluate compareTo(..) in Expression which returns a string

我有類似的情況: 如何聲明 Linq 表達式變量以便將其作為 dbParameter 處理

但在我的情況下,不想與 'equal' 運算符進行比較,我需要將一個字符串與另一個字符串進行比較。 我怎樣才能做到這一點?

我試過這樣的事情:

    var comparsionString = "aaa";
    ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
    Expression prop = Expression.Property(param, "Id");
    Expression<Func<string>> idLambda = () => comparsionString;
    Expression searchExpr = Expression.GreaterThanOrEqual(prop, idLambda.Body);

    Expression<Func<ItemSearch, bool>> myLambda =
        Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);

但不幸的是,字符串不支持 GreaterThanOrEqual。 所以我需要至少由 SQL to Entities 支持的 string.CompareTo(..) 方法。

說:

Expression searchExpr = Expression.IsTrue(*prop*.CompareTo(*idLambda*) >= 0);

如何以編譯器可以理解的方式編寫它?

任何幫助都值得贊賞。 謝謝!

如果您調查編譯器翻譯

Expression<Func<string, bool>> f = s => s.CompareTo("aaaa") >= 0;

你會發現你需要使用 GreaterThanOrEqual(Call("s", "CompareTo", "aaaa")) 所以創建它的代碼是:

var comparsionString = "aaa";
ParameterExpression param = Expression.Parameter(typeof(ItemSearch), "s");
Expression prop = Expression.Property(param, "Id");
Expression<Func<string>> idLambda = () => comparsionString;
var CallMethod = typeof(string).GetMethod("CompareTo", new[] { typeof(string) });
Expression callExpr = Expression.Call(prop, CallMethod, idLambda.Body);
Expression searchExpr = Expression.GreaterThanOrEqual(callExpr, Expression.Constant(0));

Expression<Func<ItemSearch, bool>> myLambda =
    Expression.Lambda<Func<ItemSearch, bool>>(searchExpr, param);

暫無
暫無

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

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