小编Her*_*nan的帖子

将表达式<Func <T1,bool >>动态转换为Expression <Func <T2,bool>

我找不到从Expression <Func <T1,bool >>转换为Expression <Func <T2,bool >>的方法.因为我使用了大量的反射,实际上,我真正需要的是一种采用类型参数并执行转换的方法.

public object Convert(Expression<Func<T1,bool>> expr, Type t);
Run Code Online (Sandbox Code Playgroud)

T2来自T1

public class T1 {
     int FamilyId {get; set;}
}

public class T2 : T1 {
     ... other properties
}
Run Code Online (Sandbox Code Playgroud)

我在基类上定义了一个过滤器表达式

Expression<Func<T1,bool>> filter = p => p.FamilyId == [some value]
Run Code Online (Sandbox Code Playgroud)

我想申请List <T2>

c# linq reflection lambda

7
推荐指数
1
解决办法
1827
查看次数

如何在Entity Framework上应用全局过滤器?

我的模型中有一个名为Customers的表,其中包含字段IsActive.每当我对客户运行查询时,只应检索活动客户.我可以在每个查询中包含过滤器,但这看起来不太好.我希望能够在Object Context杠杆上覆盖Customers属性,但我不确定这是否可行.任何帮助将非常感谢!谢谢

linq entity-framework

4
推荐指数
1
解决办法
2187
查看次数

如何设置不使用属性路由路由的控制器方法

我在控制器级别应用了一个路由属性,但是我希望将一个动作排除在路由之外.没有覆盖,但完全排除了路线.怎么能实现这一目标?

比方说我有:

[RoutePrefix("promotions")]
[Route("{action=index}")]
public class ReviewsController : Controller
{
    // eg.: /promotions
    public ActionResult Index() { ... }

    // eg.: /promotions/archive
    public ActionResult Archive() { ... }

    // eg.: /promotions/new
    public ActionResult New() { ... }

    // eg.: /promotions/edit/5
    [Route("edit/{promoId:int}")]
    public ActionResult Edit(int promoId) { ... }

    public void Internal() { ... }
}
Run Code Online (Sandbox Code Playgroud)

我希望内部不要被路由.

我原本期望找到[DoNotRoute]或[Ignore]属性,但我没有找到类似的东西.

asp.net-mvc-routing attributerouting asp.net-mvc-5

2
推荐指数
1
解决办法
2289
查看次数

具有接口约束的泛型类型转换

我有以下类和接口

public interface IFoo {}

public class Foo : IFoo {}

public interface IWrapper<T> where T : IFoo {}

public class Wrapper<Foo> : IWrapper<Foo> {}
Run Code Online (Sandbox Code Playgroud)

我怎样才能投Wrapper<Foo>IWrapper<IFoo>?使用Cast(InvalidCastException)时引发异常,因为使用as时为null。

谢谢您的帮助!

更新

这是一个更具体的示例:

public interface IUser {}

public class User : IUser {}

public interface IUserRepository<T> where T : IUser {}

public class UserRepository : IUserRepository<User> {}
Run Code Online (Sandbox Code Playgroud)

现在,我需要能够执行以下操作:

 UserRepository up =  new UserRepository();
 IUserRepository<IUser> iup = up as IUserRepository<IUser>;
Run Code Online (Sandbox Code Playgroud)

我正在使用.net 4.5。希望这可以帮助。

c# generics casting interface

0
推荐指数
1
解决办法
899
查看次数