对象为IQueryable

时间:2017-07-13 10:26:16

标签: c#

我正在编写的API总是需要IQueryable作为返回类型,即使它是单个对象。这是强加的,我无法改变这一点。我如何从对象创建IQueryable。

我现在的代码对我来说是错的。

<?php 
$binaryValue = 101010;
echo strtr($binaryValue,[1,0]);
?>

2 个答案:

答案 0 :(得分:1)

编辑:像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();
    }
}

答案 1 :(得分:0)

我不知道你为什么需要返回IQueryable,但我认为创建一个扩展类来将对象转换为IQueryable会更好。这将有助于实现3件事

  1. 以后更容易更新代码,因为您只需要管理1个文件中的转换逻辑
  2. 少重复的代码==&gt;少虫子
  3. 更容易测试
  4. 假设您有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();