【发布时间】:2022-01-23 21:40:31
【问题描述】:
我有一个实体框架查询,其中 where 子句根据多个选择而变化。
这是我的代码:
Expression<Func<CtCsGroup, bool>> where_expression1 = x => 1 == 1;
Expression<Func<CtCsGroup, bool>> where_expression2 = x => 1 == 1;
Expression<Func<CtCsGroup, bool>> where_expression3 = x => 1 == 1;
if (selections.SearchCSGroup.NoNull() != "")
{
where_expression1 = x => x.CsGroup.ToUpper() == selections.SearchCSGroup.ToUpper();
}
if (selections.SearchUserId.NoNull() != "")
{
where_expression3 = x => x.UsrIdn.ToUpper() == selections.SearchUserId.ToUpper();
}
if (!selections.SearchIncludeRetires)
{
where_expression2 = x => x.CsRetire != "Y";
}
var groupDTOs = (from g in _infobaseContext.CtCsGroup
.Where(where_expression1)
.Where(where_expression2)
.Where(where_expression3)
select new
{
UsrIdn = g.UsrIdn,
CsGroup = g.CsGroup,
CsRetire = g.CsRetire,
CsGroupName = "test" // n.CsGroupName
}).ToList();
我想向另一个表添加一个联接。
如何将其添加到上述查询中?我尝试了几种不同的格式,但每当我添加它时,我都会收到错误 "(where_expression1)" 、"(where_expression3)" 等。
谢谢。
这里有更多细节......
var groupDTOs = (from g in _infobaseContext.CtCsGroup
join n in _infobaseContext.TblCsGroupList
on g.CsGroup equals n.CsGroup
select new
{
UsrIdn = g.UsrIdn,
CsGroup = g.CsGroup,
CsRetire = g.CsRetire,
CsGroupName = n.CsGroupName
}).ToList();
- 而且这个没有连接也可以工作 -
var groupDTOs = (from g in _infobaseContext.CtCsGroup
.Where(where_expression1)
select new
{
UsrIdn = g.UsrIdn,
CsGroup = g.CsGroup,
CsRetire = g.CsRetire,
CsGroupName = "test" //n.CsGroupName
}).ToList();
- 但是当我同时添加连接和表达式时 -
var groupDTOs = (from g in _infobaseContext.CtCsGroup
join n in _infobaseContext.TblCsGroupList
on g.CsGroup equals n.CsGroup
.Where(where_expression1)
select new
{
UsrIdn = g.UsrIdn,
CsGroup = g.CsGroup,
CsRetire = g.CsRetire,
CsGroupName = n.CsGroupName
}).ToList();
- Visual Studio 出现此错误:
参数 2:不能从 'System.Linq.Expressions
>' 转换为 'System.Func '
【问题讨论】:
-
请使用标签来指示您正在使用的确切 EF 版本。如果你想加入,你应该使用
join语句或者更好的导航属性。但是您应该显示引发异常的代码和逐字异常消息。你的问题现在还不清楚。 -
我的第一个反应是为什么你会表达这样的基于条件的
WHERE子句。为什么不在多个语句上编写查询? -
Here are some more details...下面的所有内容都无关紧要,尽管我已经在我的回答中对此做出了回应,但您应该包含的是 exact 错误消息和匹配的where_expression创造了它。错误消息非常详细,尽管您必须学习如何解释它们。 -
你有
equals n.CsGroup.Where(where_expression1)。这不可能。您可能错过了一些括号。
标签: entity-framework linq join expression