Flo*_* M. 6 c# linq llblgenpro
我想得到一定数量的周数DateTime.
public static int WeekOf(DateTime? date)
{
if (date.HasValue)
{
GregorianCalendar gCalendar = new GregorianCalendar();
int WeekNumber = gCalendar.GetWeekOfYear(date.Value, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
return WeekNumber;
}
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我使用上面的方法:
public static List<ExpressionListDictionary> MyMethod(int weeknr)
{
using (DataAccessAdapter adapter = CreateAdapter())
{
LinqMetaData meta = new LinqMetaData(adapter);
var q = (from i in meta.Test
where WeekOf(i.StartDate) == weeknr
select new ExpressionListDictionary()
{
{"SomeId", i.Id}
}
);
return q.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
最后:
List<ExpressionListDictionary> someIDs = MyMethod(weeknr);
/* weeknr = 19 -> step by step debugging */
Run Code Online (Sandbox Code Playgroud)
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息: SD.LLBLGen.Pro.ORMSupportClasses.ORMQueryConstructionException:二进制表达式'(WeekOf(转换(EntityField(LPLA_1.StartDate AS StartDate)))== 19)'无法转换为谓词表达式.
我在返回q.ToList()时得到标题错误; .我怎样才能做到这一点?
我从未使用过 LLBLGen 库/框架...但这可能与 Entity Framework/LINQ-to-SQL 发生的问题相同:您不能放入查询 C# 方法:查询必须由您的数据库服务器,而不是本地,并且您的数据库服务器不知道如何执行 C# 代码。所以问题出在
**WeekOf(i.StartDate)** == weeknr代码部分(这是BinaryExpression您查询的唯一部分)
您发布的异常非常清楚,错误点就是我所建议的错误点。那么原因可能就是我给你的那个。
摘自https://www.llblgen.com/tinyforum/Messages.aspx?ThreadID=22861
如果您使用的是 SQL Server,则支持DATEPART(isowk, ...)(或者如果您有 MySQL,则支持WEEK(...))
public class SQLFunctionMappings : FunctionMappingStore
{
public SQLFunctionMappings()
{
Add(new FunctionMapping(
typeof(SQLFunctions),
"WeekOf",
1,
"DATEPART(isowk, {0})") // For SQL Server
// "WEEK({0}, 1)") For MySQL
);
}
}
public class SQLFunctions
{
public static int? WeekOf(DateTime? date)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你会像这样使用它:
在有 的行处LinqMetaData meta = new LinqMetaData(adapter)添加:
meta.CustomFunctionMappings = new SQLFunctionMappings();
Run Code Online (Sandbox Code Playgroud)
并更改where:
where SQLFunctions.WeekOf(i.StartDate) == weeknr
Run Code Online (Sandbox Code Playgroud)
这里有 llblgen 已经映射的函数列表,以及如何映射其他函数。
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |