草庐IT

三元表达

全部标签

c# - 如何在已编译的表达式树中调试或设置 break 语句?

当外部库包含LINQ提供程序时,它会在执行动态表达式树时抛出异常,我该如何在抛出该表达式时中断?例如,我使用第三方LINQ2CRM提供商,它允许我调用Max()IQueryable的方法|,但当它抛出一个InvalidCastException,当抛出异常时,我无法当场中断,因此很难查看堆栈跟踪,因为当调试器在我的代码中中断它时,它已经展开。我已经为提到的异常设置了“breakonthrow”。我的调试设置是:澄清我想要打破的确切位置。我不想在LINQ表达式中中断,而是想在执行表达式树时中断,或者换句话说,在执行IQueryable时中断。扩展方法Max()调用LINQ提供程序提供的覆

c# - 在没有数据库上下文的情况下将 LINQ 表达式转换为 SQL 文本

无论是LINQtoSQL还是LINQtoEntities都已经具备将LINQ转换为SQL文本字符串的能力。但我希望我的应用程序在不使用数据库上下文的情况下进行转换——这反过来意味着一个事件的数据库连接——这两个提供程序都需要。我想将LINQ表达式转换为用于WHERE和ORDERBY子句的等效SQL字符串,而不依赖于DB上下文,以使以下存储库接口(interface)工作:publicinterfaceIStorewhereT:class{voidAdd(Titem);voidRemove(Titem);voidUpdate(Titem);TFindByID(Guidid);//sure

c# - 多态模型可绑定(bind)表达式树解析器

我正在尝试找出一种方法来构建我的数据,以便它是模型可绑定(bind)的。我的问题是我必须创建一个可以表示数据中的多个表达式的查询过滤器。例如:x=>(x.someProperty==true&&x.someOtherProperty==false)||x.UserId==2x=>(x.someProperty&&x.anotherProperty)||(x.userId==3&&x.userIsActive)我已经创建了这个代表所有表达式的结构,我的问题是我如何才能使它成为模型可绑定(bind)的属性publicenumFilterCondition{Equals,}publicenu

c# - 在 Roslyn 分析器中检查表达式类型的正确方法?

我正在使用Roslyn编写代码分析器,我需要检查是否有ExpressionSyntax类型为Task或Task.到目前为止我有这个:privatestaticboolIsTask(ExpressionSyntaxexpression,SyntaxNodeAnalysisContextcontext){vartype=context.SemanticModel.GetTypeInfo(expression).Type;if(type==null)returnfalse;if(type.Equals(context.SemanticModel.Compilation.GetTypeByMe

c# - 表达式树 - 不必要的转换为 int32

在处理字节和短裤时,表达式树似乎构建了一个不必要的转换,它们将两边(例如二进制表达式)转换为int32。这是我见过的一些Linq提供程序中的一个问题,每个提供程序都必须剥离这个冗余层才能获得原始表达式。(NHibernate不会删除这一层并在SQL查询中创建一个糟糕的CAST)。//noconversionConsole.WriteLine((Expression>)((s,s1)=>s==s1));//convertstoint32Console.WriteLine((Expression>)((s,s1)=>s==s1));//convertstoint32Console.Writ

c# - 当类型仅在运行时已知时,如何使用表达式树调用泛型方法?

这是我使用反射解决的问题,但我想看看如何使用表达式树来解决。我有一个通用函数:privatevoidDoSomeThing(paramobject[]args){//Someworkisdonehere.}我需要从我类的其他地方打电话。现在,通常这很简单:DoSomeThing(blah);但前提是我在设计时知道我正在使用int。当我不知道类型直到运行时是我需要帮助的地方。就像我说的,我知道如何通过反射来做到这一点,但我想通过表达式树来做到这一点,因为我(非常有限)的理解是我可以这样做。有什么建议或指向我可以获得这种理解的网站,最好是示例代码? 最佳答案

c# - 为多行 lambda 创建表达式树的 Roslyn 流畅语法

我正在编写一个基于Roslyn的自定义工具,试图根除CS0834通过在构建时将给定的多行lambda重写为表达式树。编辑:此时,我只针对匿名多行lambda。例如://WillproduceCS0834ifBartakesExpression>Foo.Bar((intx)=>{...});到Foo.Bar(Expression.Lambda>(Expression.Block(...),Expression.Parameter(typeof(int))));这样就可以正确编译了。虽然我可以弄清楚转换给定代码所需的Expression.(blah)语法,但使用Roslyn完成它完全是另一

c# - C# 7.0 中的表达式主体获取/设置访问器功能

我在类里面有这段代码privatestringtest;publicstringTest{get=>test;set=>test=value;}但是编译器不让我编译。它说CS1043{or;expectedCS1513}expected我正在使用VS2017并使用MVC5项目定位.NETFW4.6知道为什么它不起作用吗? 最佳答案 您必须在项目中将编译器设置为版本7。项目属性→(选项卡)构建→高级→语言版本=C#7.0由@gsharp更新同时检查您对.NET编译器平台Microsoft.Net.Compilers的(NuGet)引用

c# - 模拟 IRavenQueryable 并附加 Where() 表达式

我正在尝试为一个新的mvc3项目做一些基本的概念类型代码证明。我们将Moq与RavenDB结合使用。行动:publicActionResultIndex(stringid){varmodel=DocumentSession.Query().Where(f=>f.ResponsibleBusinessId==id);returnView(model);}测试:privatereadonlyFixture_fixture=newFixture();[Test]publicvoidIndex_Action_Returns_List_Of_FinancialTransactions_For_B

c# - 动态添加新的 lambda 表达式以创建过滤器

我需要对ObjectSet进行一些过滤以获得我需要的实体:query=this.ObjectSet.Where(x=>x.TypeId==3);//thisisjustanexample;在代码的后面(在启动延迟执行之前)我再次像这样过滤查询:query=query.Where();到目前为止效果很好。这是我的问题:实体包含一个DateFrom属性和一个DateTo属性,它们都是DataTime类型。它们代表一个时间段。我需要过滤实体以仅获取属于时间段的集合的实体。集合中的句点不一定是连续的,因此,检索实体的逻辑如下所示:entities.Where(x=>x.DateFrom>=Pe