Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DbSet从接口转换到特定类_C#_Entity Framework_Casting - Fatal编程技术网

C# 使用DbSet从接口转换到特定类

C# 使用DbSet从接口转换到特定类,c#,entity-framework,casting,C#,Entity Framework,Casting,假设我有以下代码: public interface IInterface { string Name { get; set; } } public class Foo : IInterface { public string Name { get; set; } } public class Bar : IInterface { public string Name { get; set; } } /// public class Service { p

假设我有以下代码:

public interface IInterface
{
    string Name { get; set; }
}

public class Foo : IInterface
{
    public string Name { get; set; }
}

public class Bar : IInterface
{
    public string Name { get; set; }
}

///

public class Service
{
    private List<Foo> MyList();
    public IQueryable<Foo> GetObjects()
    {
        return MyList().AsQueryable();
    }

    public IQueryable<Bar> GetObjectsFromBD()
    {
        return Entities.Bar;
    }
}

我错过了什么?如何在不枚举查询的情况下实现我想要做的事情?

第一个问题:要检查查询是否来自数据库,需要检查DbQuery,而不是IQueryable,因为这两个方法都返回IQueryable,但只有database方法返回DbQuery:


易货台不是易货台。它的内容可以用作Foo。使用Cast或OfTypeWith代码,您提供的代码应该可以正常工作,并且当您期望时,缓存的代码应该不为null。您需要找出为什么底层类型是DbQuery而不是DbQuery,所以我没有看到正确的方向。谢谢
public IQueryable<IInterface> GetFooBars()
{
    var foobars = new IQueryable<IInterface>();
    if(someStuff)
        foobars = service.GetObjects(); /*From cache*/
    else
        foobars = service.GetObjectsFromBD(); /*From DbSet*/
    return foobars;
}
var query = GetFooBars();
var casted = query as IQueryable<Foo>;
if(casted == null) /*Coming from DB*/
    /*Some conditions*/
else /*Coming from cache*/
    /*Some other conditions*/
 System.Data.Entity.Infrastructure.DbQuery`1[MyNamespace.IInterface]
var query = GetFooBars();
var casted = query as DbQuery<Foo>;
if(casted == null) // *not* from database!
var query = GetFooBars();
var casted = query as DbQuery<IInterface>;
if(casted == null) //...