簡體   English   中英

在Func <>中轉換對象類型

[英]Convert object type in Func<>

我有一個存儲庫對象,用於封裝數據存儲的數據類型。 我已經定義了在整個應用程序中使用的對象,並且在存儲庫內部,我必須將它們映射到數據存儲公開的類型。 到目前為止,我有以下內容:

//The class object I work with inside my code
public class Class
{
    public string Name {get; set;}
}

public class ClassRepository
{
    public Class GetClass(Func<Class, bool> query)
    {
         //newQuery = Do something to convert the Class object in Query to internalClass exposed from Database
        using (var context = new DBEntities())
        {
            return Mapper.Map<Class>(context.InternalClasses.FirstOrDefault(newQuery));
        }     

    }
}

我要弄清楚的是如何將Func<Class, bool>轉換為Func<internalClass, bool>這樣我就不必將數據資源使用的對象暴露給我的代碼。

我假設您使用的是AutoMapper,請不要將Mapper.Map與IQueryable對象一起使用。 QueryableExtensions命名空間與其Project().To<T>()方法一起使用,是針對這種情況而設計的。

using AutoMapper.QueryableExtensions;

public class ClassRepository
{
    public Class GetClass(Expression<Func<Class, bool>> query)
    {

        using (var context = new DBEntities())
        {
            return context.InternalClasses.Project().To<Class>().FirstOrDefault(query);
        }    
    }
}

另外,您應該傳遞Expression<Func<Class, bool>>而不是Func<Class, bool>否則您的查詢將不會在服務器端發生。 它仍然可以與Func<Class, bool>但是您將要通過網絡返回所有行,然后在內存中的客戶端上執行過濾器。 對於大型表,這將給您非常糟糕的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM