【发布时间】:2018-08-28 19:11:13
【问题描述】:
这里的 LINQ 非常新。
我的表(TableA)中有以下数据:
ID Name SubmissionNo
1 Jim A-1
2 Andy A-2
3 Rick A-2
4 Mary A-3
5 Zim A-4
6 Loren A-1
然后我需要创建一个查询,允许我从该表中获取那些具有重复提交编号的记录。
到目前为止,这是我的解决方案(上下文是数据库上下文):
var duplicates = (from tbl in Context.TableA.AsNoTracking()
group tbl by tbl.SubmissionNo into grp
select new { count = grp.Count(), submissionNo = grp.Key})
.Where(x => x.count > 1)
.OrderBy(y => y.submissionNo).ToList();
变量 duplicates 然后包含记录:
count submissionNo
2 A-1
2 A-2
然后我编写主查询,这将允许我从 TableA 中获取所有具有重复提交的记录
var myList = (from tbl in Context.TableA.AsNoTracking()
join dup in duplicates on tbl.SubmissionNo equals dup.submissionNo
select new
{
ID = tbl.ID,
Name = tbl.Name,
SubmissionNo = tbl.SubmissionNo
})
.ToList();
然后我得到一个关于 myList 查询的错误
无法创建“匿名类型”类型的常量值。此上下文仅支持原始类型或枚举类型。
我认为必须有更好的方法来做到这一点,就像上面的表A一样,我实际上想要以下结果:
ID Name SubmissionNo
1 Jim A-1
2 Andy A-2
3 Rick A-2
6 Loren A-1
【问题讨论】:
-
嗨@Zysce - 我确实检查了提供的链接,但它没有做我想要的同样的事情。
-
仅使用重复项作为提交编号列表,然后在您的最后一个 Linq 查询中尝试使用 where list contains
-
如果您在 Duplicates 中不执行 ToList,是否也会出现此错误,因此如果您让 Duplicates 的类型为 IQueryable,而不是 List?
标签: c# entity-framework linq