【发布时间】:2015-10-01 15:20:17
【问题描述】:
我有这个 linq to entity 查询:
var query = (
from x in ctx.Applications
from t2 in ctx.Calendar
.Where(t2 => t2.Date >= SqlFunctions.DateAdd("dd", x.AllTime, x.RegDate) && t2.FreeDay == false)
.OrderBy(t2 => t2.Date)
.Take(1)
.DefaultIfEmpty()
select(new ApplicationGridView
{
...
HavePartners = x.HavePartners,
PlanningEndDate = t2.Date
});
如何编写扩展方法或带有部分选择的方法(用于不同的选择),如下所示:
public IQueryable<Calendar> GetNextDate(DateTime? dateFrom, int? interval)
{
return ctx.Calendar
.Where(t2 => t2.Date >= SqlFunctions.DateAdd("dd", interval, dateFrom) && t2.FreeDay == false)
.OrderBy(t2 => t2.Date)
.Take(1)
.DefaultIfEmpty();
}
然后在select中使用:
var query = (
from x in ctx.Applications
from t2 in GetNextDate(x.RegDate, x.AllTime)
select(new ApplicationGridView
{
...
HavePartners = x.HavePartners,
PlanningEndDate = t2.Date
});
var result = query.Where(predicate).ToList();
谢谢
【问题讨论】:
-
我不确定我是否理解您的问题,但我会尝试;子选择通常是第一次选择完成后的选择。您可以在 ToList() 之前对“var 结果”执行此操作...?如果我的答案离我很远,也许重新写下问题并使其更清楚将是一个好主意...
-
为什么您的决定(GetNextDate 方法)不起作用? (当然,除非您必须将“ctx”作为参数传递)。
-
在这个例子中我得到了异常。我也尝试通过 ctx,为 ctx 创建扩展,也为日历实体创建扩展,但始终执行返回错误:EntityFramework.SqlServer.dll 但未在用户代码中处理附加信息:LINQ to Entities 无法识别方法'System.Linq。 IQueryable
1[Models.Calendar] GetNextDate(System.Nullable1[System.DateTime], System.Nullable`1[System.Int32])' 方法,并且该方法不能翻译成存储表达式。
标签: c# linq-to-entities extension-methods