我有两张表研究和系列。系列是 FK'd back to Studies,因此一项研究包含可变数量的系列。每个系列项目都有一个Deleted
列,表明它已从数据库中逻辑删除。
我正在尝试Deleted
在 Study 类中实现一个属性,该属性仅在删除所有包含的系列时才返回 true。我正在使用 O/R Designer 生成的类,因此我将以下内容添加到 Study 类型的用户可修改部分类中:
public bool Deleted
{
get
{
var nonDeletedSeries = from s in Series
where !s.Deleted
select s;
return nonDeletedSeries.Count() == 0;
}
set
{
foreach (var series in Series)
{
series.Deleted = value;
}
}
}
这给出了一个异常“成员 'PiccoloDatabase.Study.Deleted' 没有支持的 SQL 转换。” 当执行这个调用 get 的简单查询时:
IQueryable<Study> dataQuery = dbCtxt.Studies;
dataQuery = dataQuery.Where((s) => !s.Deleted);
foreach (var study in dataQuery)
{
...
}
基于此http://www.foliotek.com/devblog/using-custom-properties-inside-linq-to-sql-queries/,我尝试了以下方法:
static Expression<Func<Study, bool>> DeletedExpr = t => false;
public bool Deleted
{
get
{
var nameFunc = DeletedExpr.Compile();
return nameFunc(this);
}
set
{ ... same as before
}
}
运行不支持对 SQL 的转换的查询时,我得到相同的异常。( lambda 表达式的逻辑还无关紧要 - 只是试图通过异常。)
我是否缺少一些基本属性或允许转换为 SQL 的东西?我已经阅读了关于这个异常的大部分帖子,但似乎没有什么完全适合我的情况。