2 回答
TA贡献1995条经验 获得超2个赞
不要忘记,当您将 linQ 与 EFCore 和 IQueryable 一起使用时,它会转换 Sql 语句中的 c# 代码。
你试过这个吗?
var query = from rule in dbContext.Rules
join line in lines
on rule.Raw equals line
select rule;
TA贡献1719条经验 获得超6个赞
你写了:
给我来自 DbSet 的所有规则,其中它的原始值是行中的一个元素(完全匹配等)
您的第一个解决方案将提供所需的结果:
var requestedRules = dbContext.Rules
.Where(rule => lines.Contains(rule));
在的话:从收集Rules,只选择那些Rules具有A Raw,等于序列中的值的一个值lines。
我得到了具有相同原始值的重复规则......)
显然,您的源集合具有具有相同原始值的规则!
如果您只想要唯一的原始值,则必须决定如何处理重复项:
Id Raw
1 "Hello"
2 "Hello"
你想要哪一个?首先?最后?两个都?没有任何?任何?
让我们选择 Any:我们将创建具有相同 Raw 值的规则组,并且从每个组中我们取第一个(或者如果你想要最后一个,毕竟我们不在乎。但这有点效率低下。
var result = dbContext.Rules
.Where(rule => lines.Contains(rule))
.GroupBy(rule => rule.Raw)
.Select(group => group.FirstOrDefault());
在的话:从收集Rules,只选择那些Rules具有A Raw,等于序列中的值的一个值lines。从剩余的元素中制作具有相同原始值的规则组。然后从每个 Group 中取出任何元素,例如第一个。
如果您想要所有/仅第一个/仅最后一个,您现在就知道该怎么做。
- 2 回答
- 0 关注
- 194 浏览
添加回答
举报