【发布时间】:2013-05-19 19:26:50
【问题描述】:
我经常有这样的代码:
var stRecs = db.<someTable>
.Where(a => a.DepID == depID)
选择单个记录,但是如果depID == 0 我想取回所有记录。
我正在考虑创建一个扩展方法“WhereDepID_OrAll”,比如
public static IQueryable<T> WhereDepID_OrAll<T>(this IQueryable<T> source)
where T: // is what?
{
if(depID > 0) { return source.Where(a => a.depID == depID); }
else return source.Where(a => a);
}
现在我的基本问题是:
我有几个带有 depID 的表 - 如何设置 Where T: ?
该方法将如何确定表是否具有 depID?
解决潜在问题的更好方法?
【问题讨论】:
-
也许您应该创建一个接口
IHaveDepId,并让您的表继承该接口:) 然后T : IHaveDepId。我觉得会更好 -
@JensKloster 没有。您不能在 linq to entity 查询中使用接口属性。
-
@RaphaëlAlthaus 为什么不呢?取决于您的方法-例如代码优先或模型优先,有很多方法可以修改 clr 类。
-
@JensKloster 见stackoverflow.com/questions/3613701/…
-
@RaphaëlAlthaus 我明白你的意思。数据库表必须拥有一个名为 exacly
DepID的属性(在这种情况下)
标签: c# linq extension-methods