我试图使一些代码更具可读性,并且我不太了解如何构造扩展方法和/或表达式来实现它.我们目前有很多实体都有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
我在这里忙于学习C#,C#集合是值类型还是引用类型?,由于数组是引用类型,我知道字符串也是引用类型。
谢谢。
即使使用默认的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)