I want to put an query inside an expression for a filter.
I have a switch and for a specific case I need to do a different validation.
private Expression<Func<MyClass, bool>> Filter(int idStatus)
{
switch (idStatus)
{
case case1:
return c => c.Status == (int)MyEnum.Status1 && c.Active;
case case2:
return c => c.Status == (int)MyEnum.Status2 && c.Active;
case case3:
return c => c.Status == (int)MyEnum.Status3 && c.Active;
case case4:
return c => _myService.FindByMyClassId(c.Id) != null && c.Active;
}
}
MyClass:
namespace MyNamespace
{
public class MyClass //Process class
{
public virtual int Id{ get; set; }
public virtual string ProcessCode { get; set; }
public virtual DateTime Created{ get; set; };
public virtual int Status{ get; set; }
public virtual int IdUser{ get; set; }
}
}
MyClass mapping with Nhibernate:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="MyNamespace.MyClass,MyNamespace" table="my_class" lazy="true" mutable="false">
<id name="Id" column="id" type="int32">
<generator class="native"/>
</id>
<property column="process_code" type="String" name="ProcessCode" />
<property column="created" type="DateTime" name="Created" />
<property column="id_user" type="Int32" name="IdUser" />
<property column="id_status" type="Int32" name="Status" />
</class>
</hibernate-mapping>
This method is called in the main filter method:
query = query.Where(Filter(Convert.ToInt32(filters["Status"])));
With the normal cases the code runs perfectly but, in this specific case (case4) i'm getting the error:
variable 'c' of type 'MyClass' referenced from scope '', but it is not defined