我正在使用System.Linq.Expressions.Expression类动态构建SQL"WHERE"子句.它适用于简单的子句,例如添加"PhaseCode = X"子句,我执行以下操作:
var equalTarget = Expression.Constant(phaseCode, typeof(int?));
var phaseEquals = Expression.Equal(Expression.PropertyOrField(projParam, "PhaseCode"), equalTarget);
Run Code Online (Sandbox Code Playgroud)
但是,现在我正在尝试构建一个表达式,如果已将项目分配给特定组,则该表达式将返回记录.项目和集团有多对多的关系.如果没有表达式树,我会按如下方式执行:
db.Projects.Where(p => .... && p.GroupsAssigned.Any(g => g.ID == groupId))
Run Code Online (Sandbox Code Playgroud)
但是,我似乎找不到用Expression类表达的方法.实际上有两件事我想不通:
任何帮助是极大的赞赏.
我有一个方法,它Progress<T>作为参数,并在内部报告进展.
因为进度可能在工作线程上快速发生(例如每秒数百次),我需要缓冲它,然后用接收的记录更新视图模型,例如每半秒一次.
在过去我使用过,Observable.FromEventPattern().Buffer(TimeSpan)所以我看到如果我将Progress<T>报告包装到一个事件中,就可以使用相同的Rx机制.然而,这似乎是一种矫枉过正.有更优雅的解决方案吗?
我也看过TPL Dataflow,BufferBlock但我不确定它是否支持基于时间的缓冲,例如每半秒一次.
如果有人有例子,请发布.非常感谢.
我正在使用以下方法通过反射实例化对象
Activator.CreateInstance(Type type, params object[] parameters)
Run Code Online (Sandbox Code Playgroud)
其中“参数”是在运行时传递给构造函数的参数列表。
但是,我希望此过程对团队中的其他开发人员来说更加直观,而不是传递object []参数数组,而是希望他们传递匿名对象,例如
// note, invalid code
Activator.CreateInstance(typeof(MyType), new { paramName1 = "abc", paramName2 = "xyz})
Run Code Online (Sandbox Code Playgroud)
由于framework方法不支持它,因此有人可以将匿名对象转换为数组的代码示例吗?请注意,参数的顺序对于Activator.CreateInstance()方法很重要,因为这就是参数匹配的方式。显然,这很容易出错,这就是为什么我更喜欢使用匿名类型的原因。
任何建议都将不胜感激。
亚历克