相关疑难解决方法(0)

访问成员表达式的值

如果我有产品.

var p = new Product { Price = 30 };
Run Code Online (Sandbox Code Playgroud)

我有以下linq查询.

var q = repo.Products().Where(x=>x.Price == p.Price).ToList()
Run Code Online (Sandbox Code Playgroud)

在IQueryable提供程序中,我得到一个包含常量表达式的p.Price的MemberExpression,但是我似乎无法从它获得值"30".

更新 我试过这个,但它似乎不起作用.

var memberExpression = (MemberExpression)GetRootConstantExpression(m);
var fi = (PropertyInfo)memberExpression.Member;
var val = fi.GetValue(((ConstantExpression)memberExpression.Expression).Value, null);
Run Code Online (Sandbox Code Playgroud)

干杯.

c# linq lambda expression-trees

63
推荐指数
5
解决办法
4万
查看次数

如何将表达式编译为实际结果?

我正在使用表达式围绕Web服务调用构建API,以允许开发人员指定查询并让ExpressionVisitor将Expression转换为查询字符串.该请求是XML,其中包含一个包含查询字符串的特定元素.

例如,我可以做这样的事情,它将检索银行名称为Bank 1或Bank 2的所有支票账户:

"bankname ='Bank 1'或bankname ='Bank 2'"

Web服务可以处理更复杂的查询,但我现在只是坚持这一点.

所以我有一个CheckingAccount类:


[IntacctObject("checkingaccount")]
public class CheckingAccount : Entity
{
    [IntacctElement("bankaccountid")]
    public string Id { get; set; }

    [IntacctElement("bankname")]
    public string BankName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有一个ExpressionVisitor,其主要功能是转换如下表达式:

Expression> expression = ca => ca.BankName == "Bank 1" || ca.BankName == "Bank 2"

进入查询:"bankname ='Bank 1'或bankname ='Bank 2'"

这不是那么艰难.当我引入局部变量时,事情开始崩溃的地方:


var account = new CheckingAccount { BankName = "Bank 1" };
string bankName = "Bank 2";

Expression> expression = ca => ca.BankName == account.BankName …
Run Code Online (Sandbox Code Playgroud)

c# expression-trees c#-4.0

5
推荐指数
1
解决办法
262
查看次数

标签 统计

c# ×2

expression-trees ×2

c#-4.0 ×1

lambda ×1

linq ×1