小编Wya*_*arp的帖子

LINQ to Entities无法识别该方法(在相关实体上)

我试图使一些代码更具可读性,并且我不太了解如何构造扩展方法和/或表达式来实现它.我们目前有很多实体都有RecordStatusTypeId它们(从接口实现IRecordStatus)

public interface IRecordStatus
{
    int RecordStatusTypeId { get; set; }
    RecordStatusType RecordStatusType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里的目标是替换类似于.Where(RecordStatusTypeId != (int)RecordStatusTypes.Deleted)扩展方法的语句.ActiveRecords()

我可以使用以下Extension方法完成此操作:

public static IQueryable<T> ActiveRecords<T>(this DbSet<T> entitySet)
    where T : class, IRecordStatus
{
    return entitySet.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted);
}
Run Code Online (Sandbox Code Playgroud)

*我有这样的扩展方法为DbSet<T>,IQueryable<T>,ICollection<T>,和IEnumerable<T>

这适用于类似的语句MyDbContext.Entities.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted),但如果我尝试替换类似的内容,我会收到错误"LINQ to Entities无法识别方法"

MyDbContext.Entities.Where(e => e.RelatedEntity.Where(re => re.RecordStatusTypeId != (int)RecordStatusTypes.Deleted));
Run Code Online (Sandbox Code Playgroud)

我想做什么:

MyDbContext.Entities.Where(e => e.RelatedEntity.ActiveRecords().Any());
Run Code Online (Sandbox Code Playgroud)

如何更改扩展方法(或添加表达式)以便我可以过滤DbSetlinq子句内部以及相关实体上的活动记录?

c# linq linq-to-entities entity-framework entity-framework-6

5
推荐指数
1
解决办法
599
查看次数

C#集合是值类型还是引用类型?

我在这里忙于学习C#,C#集合是值类型还是引用类型?,由于数组是引用类型,我知道字符串也是引用类型。

谢谢。

c# collections

3
推荐指数
1
解决办法
1516
查看次数

控制到达非void函数的结尾[-Werror = return-type]

即使使用默认的else语句后,我也收到此错误

int max_of_four(int a, int b, int c, int d)
{
    if((a>b)&&(a>c))
    {        
        if(a>d)
            return a;
    }
    else if((b>c)&&(b>d))
    {  
        return b; 
    }
    else if(c>d)
    { 
        return c; 
    }
    else 
        return d;
}
Run Code Online (Sandbox Code Playgroud)

c++ if-statement return-type

-5
推荐指数
1
解决办法
6437
查看次数