Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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# LINQ到实体和铸造_C#_.net_Entity Framework_Linq To Sql_Entity Framework 5 - Fatal编程技术网

C# LINQ到实体和铸造

C# LINQ到实体和铸造,c#,.net,entity-framework,linq-to-sql,entity-framework-5,C#,.net,Entity Framework,Linq To Sql,Entity Framework 5,我有几个EF代码第一类,它有一个CategoryId成员,这个成员也在名为ICategoryFilterable的接口中定义 public class One : ICategoryFilterable { public int CategoryId { get; set; } /* more properties here */ } public class Two : ICategoryFilterable {

我有几个EF代码第一类,它有一个CategoryId成员,这个成员也在名为ICategoryFilterable的接口中定义

    public class One : ICategoryFilterable
    {
        public int CategoryId { get; set; }
        /* more properties here */
    }

    public class Two : ICategoryFilterable
    {
        public int CategoryId { get; set; }
        /* more properties here */
    }

    public interface ICategoryFilterable
    {
        int CategoryId { get; set; }
    }
现在,我想按指定的类别从数据库中检索记录。我已经为此创建了一个通用方法,但它不起作用,我找不到解决方案

    private IQueryable<T> FilterByCategory<T>(IQueryable<T> items, IEnumerable<int> filter)
        where T : ICategoryFilterable
    {
        return from item in items
               where filter.Contains(item.CategoryId)
               select item;
    }
private IQueryable过滤器ByCategory(IQueryable项,IEnumerable过滤器)
式中T:ICategoryFilterable
{
从项目中的项目返回
其中filter.Contains(item.CategoryId)
选择项目;
}
无法将类型“MyNamespace.One”强制转换为类型“MyNamespace.ICategoryFilterable”。LINQ to实体仅支持强制转换EDM基元或枚举类型

这应该有用

您可以使用代理选择适当的类别ID:

    private IQueryable<T> FilterByCategory<T>
                (IQueryable<T> items, IEnumerable<int> filter, 
                 Func<T, int> categorySelector)
    {
        return items.Where(i => filter.Contains(categorySelector(i)));
    }
private IQueryable FilterByCategory
(i可计量项目、i可计量过滤器、,
Func类别选择器)
{
返回items.Where(i=>filter.Contains(categorySelector(i));
}
快速使用示例:

        var source = Enumerable.Empty<One>().AsQueryable();
        var filter = Enumerable.Empty<int>();

        var filtered = FilterByCategory(source, filter, s => s.CategoryId);
var source=Enumerable.Empty().AsQueryable();
var filter=Enumerable.Empty();
var filtered=FilterByCategory(源、过滤器、s=>s.CategoryId);

请查看我的更改。但是,这也不起作用(请阅读异常)。您可以为您的问题添加FilterByCategory方法调用的示例吗?IEnumerable只是一个整数列表。这不是问题所在。它无法将
One
强制转换为
ICategoryFilterable
,以从数据库中获取正确的记录。我认为如果不事先将源代码枚举到内存中,您将无法尝试执行此操作。我已经编辑了我的答案,以提供另一种解决方案。