【发布时间】:2021-04-25 14:38:41
【问题描述】:
我正在使用 EF6 + SQL Server。
我想对我的一张表进行查询,并将结果按条件映射到 2 个组中。
在每个组中,结果应作为不同类型的模型获取。这里的想法是,在一种情况下我需要很多字段,但在另一种情况下不需要,当然,我更喜欢在 1 次访问数据库中获取所有数据。
我正在尝试做类似的事情:
IEnumerable<long> idsWithFullModel = new[] { 1, 2 };
var groups = context.MyTable
.GroupBy(
x => idsWithFullModel.Contains(x.id),
x => idsWithFullModel.Contains(x.id) ?
new
{
field1 = x.field1,
feild2 = x.feild2,
} :
new
{
field1 = x.field1,
});
当我尝试这样做时,我得到一个错误
无法将 lambda 表达式转换为类型“IEqualityComparer,因为它不是委托类型”编译器错误
是否可以运行这种查询?
我试图按照@kamaz08 的建议使用对象:
IEnumerable<long> idsWithFullModel = new[] { 1l, 2l };
var groups = new List<(long id,int field1,int feild2 )>{(1l, 1,2), (3l,1,2)}
.GroupBy(
x => idsWithFullModel.Contains(x.id),
x => idsWithFullModel.Contains(x.id)
? (object) new
{
field1 = x.field1,
feild2 = x.feild2,
}
: (object) new
{
field1 = x.field1,
}
);
但现在我收到下一个错误:
无法将类型“匿名类型”转换为类型“System.Object”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
【问题讨论】:
-
由于我对 EF 和 Linq 了解不多 - 看看您的数据是什么样的示例以及您的预期结果会很有趣。
标签: c# .net group-by entity-framework-6 sql-server-2016