.net - 表达式树不能包含动态操作

标签 .net dynamic c#-4.0

如果我尝试将动态类型值传递到 Entity Framework linq 查询中,则会收到此错误。

dynamic sname = "suraj";    // even object, var
AppUser appUser = Ctx.AppUsers.First(u => u.Name == sname);

如果我尝试首先将值存储在字符串中并使用它,我得到 “对象引用错误”。

var name = "suraj";
string sname = new string(((string)name).ToCharArray());

AppUser appUser = Ctx.AppUsers.First(u => u.Name == sname);

最佳答案

看看DLINQ它允许您执行以下操作:

var query =
    db.Customers.
    Where("City = @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("new(CompanyName as Name, Phone)");

请注意,查询中的表达式是可以在运行时动态构造的字符串。

该库有一些非常非常好的功能,包括到表达式树的隐式转换,您将能够顺利地将其集成到现有的表达式树中。

(当你回想起 2006 年左右编写的 DLINQ 时,它是非常令人惊奇的,并且仍然处于 C# 技术进步的前沿Download included in the \LinqSamples\DynamicQuery directory here )

关于.net - 表达式树不能包含动态操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5614574/

相关文章:

C# 动态对象 - 设置 "Enum"值

c# - 当用户登录到 Windows 时,ToolStripButton 从 PropertyGrid 中消失

c# - 如何在网页上搜索一些文字?

c# - 路径 '/' 的 Controller 未找到或未在 Sitecore 中实现 IController

javascript - 动态创建 Onsen UI 元素

asp.net 从动态插入的文本框中获取文本一直返回 null

unit-testing - 在 Microsoft.Practices.ServiceLocation.dll 中出现错误 'Microsoft.Practices.ServiceLocation.ActivationException'

c# - 如何在 .NET 构建期间显示 MessageBox?

c++ - 使本地 c 库函数可全局访问

c# - 检查记录是否存在于 Sqlite + C#