C# 从datacontext返回两个视图的相同类型

C# 从datacontext返回两个视图的相同类型,c#,linq,nhibernate,dbml,C#,Linq,Nhibernate,Dbml,我创建了两个视图,它们从相同的表返回完全相同的列。这两个视图之间的唯一区别是它们根据不同的参数进行过滤。我已经将这些添加到了我的.dbml文件中 ()然后为这两个视图自动生成两个类 在我的代码中,根据属性过滤器的值,将查询两个视图中的一个,即当前视图或上一个视图。我需要这些视图以相同的类型返回。因此,IOrderedQueryable项具有一种返回类型 当前,它们以clientOrdersQueryCurrent或clientOrdersQueryPrevious返回。如果我将IOrderedQ

我创建了两个视图,它们从相同的表返回完全相同的列。这两个视图之间的唯一区别是它们根据不同的参数进行过滤。我已经将这些添加到了我的.dbml文件中 ()然后为这两个视图自动生成两个类

在我的代码中,根据属性过滤器的值,将查询两个视图中的一个,即当前视图或上一个视图。我需要这些视图以相同的类型返回。因此,IOrderedQueryable项具有一种返回类型

当前,它们以clientOrdersQueryCurrent或clientOrdersQueryPrevious返回。如果我将IOrderedQueryable项设置为其中一个,并尝试强制转换另一个类型,则会导致运行时错误

        IOrderedQueryable<> items;
        bool filterQuery = false;
        if (!string.IsNullOrEmpty(OrderNumber) || DateFrom != null || Dateto != null || !string.IsNullOrEmpty(TrackingNumber) || UserId != null)
        {
            filterQuery = true;
        }

        if (Filter == "Current")
        {
            if (filterQuery)
            {
                items = dataContext.clientOrdersQueryCurrents.Where(o => o.client_id == currentClientIdProvider.GetCurrentClientId()
                            && (string.IsNullOrEmpty(OrderNumber) || o.OrderNumber.Contains(OrderNumber))
                            && (DateFrom == null || o.OrderPlaced >= DateFrom)
                            && (Dateto == null || o.OrderPlaced <= Dateto)
                            && (string.IsNullOrEmpty(TrackingNumber) || o.TrackingReference.Contains(TrackingNumber))
                            && (UserId == null || o.UserId == UserId)).OrderByDescending(o => o.OrderPlaced);
            }
            else
            {
                items = dataContext.clientOrdersQueryCurrents.Where(o => o.client_id == currentClientIdProvider.GetCurrentClientId()).OrderByDescending(o => o.OrderPlaced);
            }
        }
        else if (Filter == "Previous")
        {
            if (filterQuery)
            {
                items = dataContext.clientOrdersQueryPrevious.Where(o => o.client_id == currentClientIdProvider.GetCurrentClientId()
                            && (string.IsNullOrEmpty(OrderNumber) || o.OrderNumber.Contains(OrderNumber))
                            && (DateFrom == null || o.OrderPlaced >= DateFrom)
                            && (Dateto == null || o.OrderPlaced <= Dateto)
                            && (string.IsNullOrEmpty(TrackingNumber) || o.TrackingReference.Contains(TrackingNumber))
                            && (UserId == null || o.UserId == UserId)).OrderByDescending(o => o.OrderPlaced);
            }
            else
            {
                items = dataContext.clientOrdersQueryPrevious.Where(o => o.client_id == currentClientIdProvider.GetCurrentClientId()).OrderByDescending(o => o.OrderPlaced);
            }
        }
        else 
        {
            //Default call - current orders
            items = dataContext.clientOrdersQueryCurrents.Where(o => o.client_id == currentClientIdProvider.GetCurrentClientId()).OrderByDescending(o => o.OrderPlaced);
        }
IOrderedQueryable项;
bool filterQuery=false;
如果(!string.IsNullOrEmpty(OrderNumber)| | DateFrom!=null | | Dateto!=null | | |!string.IsNullOrEmpty(TrackingNumber)| | UserId!=null)
{
filterQuery=true;
}
如果(过滤器=“当前”)
{
if(filterQuery)
{
items=dataContext.clientOrdersQueryCurrents.Where(o=>o.client_id==CurrentClientProvider.GetCurrentClientId()
&&(string.IsNullOrEmpty(OrderNumber)| | o.OrderNumber.Contains(OrderNumber))
&&(DateFrom==null | | o.OrderPlaced>=DateFrom)
&&(Dateto==null | | o.orderplacted o.orderplacted);
}
其他的
{
items=dataContext.clientOrdersQueryCurrents.Where(o=>o.client_id==CurrentClientProvider.GetCurrentClientId()).OrderByDescending(o=>o.OrderPlaced);
}
}
else if(过滤器=“上一个”)
{
if(filterQuery)
{
items=dataContext.clientOrdersQueryPrevious.Where(o=>o.client_id==CurrentClientProvider.GetCurrentClientId()
&&(string.IsNullOrEmpty(OrderNumber)| | o.OrderNumber.Contains(OrderNumber))
&&(DateFrom==null | | o.OrderPlaced>=DateFrom)
&&(Dateto==null | | o.orderplacted o.orderplacted);
}
其他的
{
items=dataContext.clientOrdersQueryPrevious.Where(o=>o.client\u id==CurrentClientProvider.GetCurrentClientId()).OrderByDescending(o=>o.OrderPlaced);
}
}
其他的
{
//默认呼叫-当前订单
items=dataContext.clientOrdersQueryCurrents.Where(o=>o.client_id==CurrentClientProvider.GetCurrentClientId()).OrderByDescending(o=>o.OrderPlaced);
}
我目前唯一能想到的解决方法是创建一个类,并在返回后让查询将结果映射到该类

最好的方法是什么


我目前使用的ORM是NHibernate。

最好映射到一些公共类

IOrderedQueryable<CommonItem> items;

items = dataContext.clientOrdersQueryCurrents.Select(e => new CommonItem{...});
...
items = dataContext.clientOrdersQueryPrevious.Select(e => new CommonItem{...});
items = dataContext.clientOrdersQueryPrevious.ProjectTo<CommonItem>();