当我使用任何.NET方法时,会有一些提示解释方法及其参数.
如何为自己的方法实现相同的行为?是否有Visual Studio功能允许我添加这些功能?
我想创建一个传递类型表达式的方法Expression<Func<T, string>
来创建类型的表达式Expression<Func<T, bool>>
来过滤字符串属性StartsWith
,EndsWith
并Contains
使用这些表达式之类的方法:
.Where(e => e.MiProperty.ToUpper().StartsWith("ABC"));
.Where(e => e.MiProperty.ToUpper().EndsWith("XYZ"));
.Where(e => e.MiProperty.ToUpper().Contains("MNO"));
Run Code Online (Sandbox Code Playgroud)
该方法应如下所示:
public Expression<Func<T, bool>> AddFilterToStringProperty<T>(Expresssion<Func<T, string>> pMyExpression, string pFilter, FilterType pFiltertype)
Run Code Online (Sandbox Code Playgroud)
其中过滤式是包含三个所提到的操作的枚举类型(StartsWith
,EndsWith
,Contains
)
我有这样的模型类:
public class SomeClass
{
public int EmployeeId {get;set;}
public int DayTotal {get;set}
}
Run Code Online (Sandbox Code Playgroud)
对于此模型类,我正在为'DayTotal'属性创建自定义ValidationAttribute.自定义验证器将针对另一个定义允许的最大天数的表检查输入的值'DayTotal'值.
在验证器中编写查询时,如何从"创建"视图中引用所选的"EmployeeId"?
public class DayTotalAttribute : ValidationAttribute
{
ProjectDBContext db = new ProjectDBContext();
public override bool IsValid(object value)
{
if (value == null)
{
return false;
}
var products = from p in db.EmployeeDayMax
where p.EmployeeId = ???
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
我的解决方案采取了不同的方法.有用的答案让我在其他地方寻找.此博客由斯科特谷有助于提供一个更简单的方法:
在我的模型中 - >
public class SomeClass : IValidateObject
{
public int EmployeeId {get; set;}
public int DayTotal {get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext …
Run Code Online (Sandbox Code Playgroud) 我定义:
[ActiveRecord("BaseEntity", Lazy = true )]
class BaseClass {}
[ActiveRecord("DerivedEntity", Lazy = true )]
class DerivedClass : BaseClass {}
Run Code Online (Sandbox Code Playgroud)
在DB BaseEntity和DerivedEntity中,1 = 1
我创造:
BaseClass myClass = New DerivedClass();
Run Code Online (Sandbox Code Playgroud)
问题:
当我试着问
myClass is DerivedClass
Run Code Online (Sandbox Code Playgroud)
我得到"假",因为myClass不是DerivedClass而是BaseClassProxy.
没有延迟加载,NHibernate不会创建代理对象,我没有这个问题.
当我尝试将myClass转换为DerivedClass时,我得到了这个错误(显然),因为我尝试将BaseClassProxy对象强制转换为DerivedClass.
Unable to cast object of type 'Castle.Proxies.BaseClassProxy' to type 'DerivedClass'.
Run Code Online (Sandbox Code Playgroud)
问题:
如何获取实际分配的对象类型以将其与DerivedClass进行比较?
是否可以转换BaseClassProxy对象以获取DerivedClass的实例?
感谢您的答复.