【问题标题】:Entity framework get (unique) number of times ID is present in event实体框架获取(唯一)ID 出现在事件中的次数
【发布时间】:2023-04-01 15:43:02
【问题描述】:

我们有包含成分的购物清单 DataTable。一种成分可以多次添加到购物清单中。

我想选择的是:在多少个购物清单中存在一种成分。即使成分在一个购物清单查询中多次出现,也应该返回 1。 简而言之:我需要 COUNT 个包含成分 ID 的 ShoppingListIngredients(无论是一次还是多次)

我试过这样:

var usersShoppingListIngredients = context.ShoppingListIngredients
                .Where(sli => sli.ShoppingList.userId == userId)
                .GroupBy(sli => sli.ingredientId)
                .Select(sli => new
                {
                    itemId = sli.Key,
                    item = sli.FirstOrDefault().CodingKeys.Ingredients.FirstOrDefault(i => i.languageId == languageId).coding,
                    itemsCount = sli.Count(),
                    percent = [Tell_Me_How] * 100 / totalPurchases
                }).OrderByDescending(r => r.itemsCount);

但它返回错误值 - 当插入多个值时,它返回所有出现的次数。

我正在使用 Entity Framework 4.0。

任何提示将不胜感激;)

【问题讨论】:

  • 我不知道你为什么不能只使用sli.Count() * 100 / totalPurchasesShoppingListIngredients 看起来像一个连接表 (shoppinglistid PK, ingredientsid PK, userid PK) ,当您按成分 ID 对表进行分组时,那里不应该有多个购物清单 id。如果您可以提供示例数据或类的外观,那就太好了。
  • sli.Count() 仍然返回每个 ID 的出现总数。如果我按 ShoppingListIngredients 分组并且成分被插入 3 次,那么我得到 3。我需要 COUNT 个包含成分 ID 的 ShoppingListIngredients(不管是一次还是多次)。

标签: c# entity-framework entity-framework-4


【解决方案1】:

试试这个itemsCount = sli.DistinctBy(s => s.ShoppingListId).Count()

【讨论】:

  • 感谢您的信息,但不幸的是我没有 DistinctBy 功能。可能不是 EF 4.0 功能。此外,当我尝试使用 Distinct 时,它不允许我使用参数。错误:无法将 labda 表达式转换为类型“system.collections.generic.IE.quality.comparer”,因为它不是委托类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多