gpt4 book ai didi

c# - 二元表达式无法转换为 LINQ 中的谓词表达式

转载 作者:太空狗 更新时间:2023-10-29 21:49:47 25 4
gpt4 key购买 nike

我想获取某个给定 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;
}

然后我用上面的方法:

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();
}
}

最后:

    List<ExpressionListDictionary> someIDs =  MyMethod(weeknr);
/* weeknr = 19 -> step by step debugging */

描述:在执行当前网络请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:SD.LLBLGen.Pro.ORMSupportClasses.ORMQueryConstructionException:二进制表达式“(WeekOf(Convert(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

如果您使用的是支持 DATEPART(isowk, ...) 的 SQL Server(或者如果您使用的是支持 WEEK(...) 的 MySQL)

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;
}
}

然后你会像这样使用它:

LinqMetaData meta = new LinqMetaData(adapter) 的行中,添加:

meta.CustomFunctionMappings = new SQLFunctionMappings();

并更改位置:

where SQLFunctions.WeekOf(i.StartDate) == weeknr

Here有 llblgen 已经映射的函数列表,以及如何映射其他函数。

关于c# - 二元表达式无法转换为 LINQ 中的谓词表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com