C#Generic传递具有相同属性的不同对象

时间:2014-11-27 15:28:00

标签: c# linq generics entity-framework-6

我不确定我所做的事情是否可行。 我有2种方法。 2种方法的主体完全相同,但参数和返回方法的签名都不同。传入的参数属性已更改且对象不同但具有相同的属性名称(它们是两个不同的实体框架实体)。不能从基础对象继承(我认为),因为这些是实体框架实体。

最好展示示例然后再谈谈..

方法1

private static IQueryable<MapListing> ApplyMapFilterToListings(IQueryable<MapListing> listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false)
{
    //setting properties of listings (of type MapListing Entity)
}

方法2

private static IQueryable<vListing> ApplyFilterToListings(IQueryable<vListing> listings, ListingSearchCriteria criteria, bool boolIsPremiumListingsOnly = false)
{
    //setting properties of listings (of type vListing Entity)
}

一般来说,我不介意函数的主体是否完全相同,但是在这种情况下,很多属性都是有条件设置的,我想让这些方法完全相同,并且证明它们不同步。

我还在退回IQueryable&lt;&gt;是因为我在返回后做了其他的事情

1 个答案:

答案 0 :(得分:1)

我认为你有两种选择。

  1. 实施interface

    如果创建包含所有共享属性和方法的接口,则可以创建一个接受该接口的方法,或者在使用泛型时创建实现它的所有类型。 (是,it is possible to implement an interface in EF generated classes

  2. 使用dynamic

    dynamic关键字会为您提供很多自由。您可以假装存在属性或方法。传入对象时,会在运行时检查此项。您应谨慎使用dynamic,因为它可能会损害您的软件质量。

  3. 第一种选择是首选。这是最好的解决方案,但它要求您可以访问类。如果课程在第三方库中,dynamic可能是您唯一的解决方案。