簡體   English   中英

對象為IQueryable

[英]Object to IQueryable

我正在編寫的API總是需要IQueryable作為返回類型,即使它是單個對象。 這是強加的,我無法改變這一點。 我如何從一個對象創建一個IQueryable。

我現在的代碼對我來說是錯的。

List<Entity> listOfEntity = new List<Entity>();
listOfEntity.Add(entity);
IQueryable<Entity> queryableEntity = listOfEntity.AsQueryable();

編輯:像kienct89我創建了一個通用的擴展方法,以方便使用:

public static class ObjectExtensionMethods
{
    public static IQueryable<T> ToQueryable<T>(this T instance)
    {
        return new [] {instance}.AsQueryable();
    }
}

該方法可以簡單地在您創建的對象上調用它:

object anObject = new object();
anObject.ToQueryable();

@ kienct89:哇,這幾乎就是我所做的,即使名字匹配,我只是拿了數組,因為它似乎更便宜,你在一行中做到了:

 public static class ObjectExtensionMethods { public static IQueryable<T> ToQueryable<T>(this T instance) { TEntityType[] arrayOfObject = {instance}; return arrayOfObject.AsQueryable(); } } 

我們的答案都改為:

 public static class ObjectExtensionMethods { public static IQueryable<T> ToQueryable<T>(this T instance) { return new [] {instance}.AsQueryable(); } } 

我不知道為什么你需要返回IQueryable ,但我認為最好創建一個擴展類來將對象轉換為IQueryable 這將有助於實現3件事

  1. 由於您只需要在1個文件中管理轉換邏輯,因此將來更容易更新代碼
  2. 減少重復的代碼==>減少錯誤
  3. 更容易測試

假設你有3個模型類

public class Entity
{
    public int Id {get; set;}
}

public class Customer : Entity
{
    public string Name {get; set;}
}

public class Cart : Entity 
{
}

我們可以像這樣編寫擴展類

public static class QueryableExtension
{
    public static IQueryable<T> ToQueryable<T>(this T obj) where T : Entity
    {
        return new List<T> { obj }.AsQueryable();
    }
}

如何使用

var customer = new Customer { Id = 1, Name = "test" };
var cart = new Cart { Id = 1 };
IQueryable<Customer> customers = customer.ToQueryable();
IQueryable<Cart> carts = cart.ToQueryable();

暫無
暫無

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

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