【发布时间】:2010-05-12 22:21:23
【问题描述】:
我有下面的表达方式
public static Expression<Func<T, bool>> JoinByDateCheck<T>(T entity, DateTime dateToCheck) where T : IDateInterval
{
return (entityToJoin) =>
entityToJoin.FromDate.Date <= dateToCheck.Date && (entityToJoin.ToDate == null || entityToJoin.ToDate.Value.Date >= dateToCheck.Date);
}
IDateInterval接口定义如下:
interface IDateInterval
{
DateTime FromDate {get;}
DateTime? ToDate {get;}
}
我需要以几种方式应用它:
(1) 查询Linq2Sql表:
var q1 = from e in intervalTable where FunctionThatCallsJoinByDateCheck(e, constantDateTime) select e;
或类似的东西:
intervalTable.Where(FunctionThatCallsJoinByDateCheck(e, constantDateTime))
(2) 我需要在一些表连接中使用它(因为 linq2sql 不提供比较连接):
var q2 = from e1 in t1 join e2 in t2 on e1.FK == e2.PK where OtherFunctionThatCallsJoinByDateCheck(e2, e1.FromDate)
或
var q2 = from e1 in t1 from e2 in t2 where e1.FK == e2.PK && OtherFunctionThatCallsJoinByDateCheck(e2, e1.FromDate)
(3) 我需要在一些这样的查询中使用它:
var q3 = from e in intervalTable.FilterFunctionThatCallsJoinByDateCheck(constantDate);
动态 linq 不是我可以使用的,所以我必须坚持使用普通 linq。
谢谢
澄清:
最初我只有最后一个方法 (FilterFunctionThatCallsJoinByDateCheck(this IQueryable<IDateInterval> entities, DateTime dateConstant)),它包含表达式中的代码。
问题是,如果我在一个方法中编写代码并这样调用它,我会得到一个SQL Translate exception。
我只想将此函数的使用扩展到 where 子句(参见第 2 点中的第二个查询)
【问题讨论】:
标签: c# .net linq linq-to-sql