gpt4 book ai didi

c# - EntityFramework 无法创建类型为 'Anonymous type' 的常量值。在此上下文中仅支持原始类型或枚举类型

转载 作者:太空狗 更新时间:2023-10-30 01:20:26 24 4
gpt4 key购买 nike

我正在尝试对我的实体执行 ToDictionary(),但我不断收到此错误或另一个类似的错误,但消息中显示了我的实体:

Unable to create a constant value of type 'Anonymous type'. Only primitive types or enumeration types are supported in this context.

或者这个错误信息中包含我的实体:

Unable to create a constant value of type 'DataAccess.Posts'. Only primitive types or enumeration types are supported in this context.

我将查询分解为一些较小的和平,但仍然收到以下错误消息之一:

var posts = dbContext
.Posts
.Where(x => channels.Contains(x.Connection))
.DistinctBy(p => new { p.Medium, p.ID })
.OrderByDescending(x => x.Date)
.Skip(skip)
.Take(take);

var asociatedTags = dbContext
.PostTagRelation
.Where(x => posts.Any(g => g.ItemId == x.ItemId && g.Medium == x.Medium)
&& x.Company == companyId)
.Select(x => new { x.ItemId, x.Tags })
.ToList();

Dictionary<string, Tags> dicTags = new Dictionary<string, Tags>();
dicTags = asociatedTags.ToDictionary(g => g.ItemId, g => g.Tags);

我看到了一些关于此的帖子,但我无法将它们与我的情况放在一起。

非常感谢任何帮助!

最佳答案

DistinctBy (是 this one 吗?)可能只是 LINQ-to-Objects 的扩展方法(即 IEnumerable<T>,而不是 IQueryable<T>)。这意味着,调用它会执行数据库查询,结果是 posts。内存中的集合(不是 IQueryable<Post> )导致第二个查询中的异常 posts.Any...因为关于第二个 SQL 查询 posts现在是 LINQ-to-Entities 不支持的“常量”对象的集合。此外,它会导致排序,SkipTake在内存中执行,而不是在数据库中执行,可能会产生不必要的开销,并且加载的数据比您需要的多得多。

你可以尽量避开DistinctBy并将其替换为应返回 posts 的以下内容作为IQueryable<Post> :

var posts = dbContext
.Posts
.Where(x => channels.Contains(x.Connection))
.GroupBy(p => new { p.Medium, p.ID })
.Select(g => g.FirstOrDefault()) // gives the first Post in each group
.OrderByDescending(x => x.Date)
.Skip(skip)
.Take(take);

关于c# - EntityFramework 无法创建类型为 'Anonymous type' 的常量值。在此上下文中仅支持原始类型或枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092663/

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