【问题标题】:Using ternary operator/conditional on select on dynamic linq在动态 linq 上使用三元运算符/条件选择
【发布时间】:2023-02-17 03:27:53
【问题描述】:

我正在寻找使用动态 Linq 库进行 linq 查询,但我试图选择一个属性,该属性是一个 IEnumerable<T> 集合,在动态 linq 中调用 Sum() 函数时会抛出异常。我想知道我是否可以这样说:

queryable.Select("new (Sum(collection == null ? 0 : collection.Count) as Total)")

因为

Select("new (Sum(np(Contestants.Count, 0)) as Total)")

返回空引用异常

【问题讨论】:

  • 我不太了解动态linq。在“正常”的 linq 中,你会在总和之前说 .DefaultIfEmpty(0)。也许这有帮助。
  • @Klamsi dynamic-linq.net/advanced-null-propagation它没有相同的语法
  • 您的 Where 接线员没有任何意义。用纯 C# 编写相同的代码,您会感到惊讶。
  • @SvyatoslavDanyliv 是的,我意识到我打算写 Select
  • Select 中的字符串再次不正确。你想达到什么目的?使用动态 linq 对我来说是不好的品味。一切都可以通过表达式树生成。

标签: c# linq .net-core dynamic-linq


【解决方案1】:

np(空传播)使用正确,但Sum只能在分组时使用。 (就像普通的 Linq)

一个可能的工作代码示例可能是:

public class X
{
    public string Key { get; set; } = null!;

    public List<Y>? Contestants { get; set; }
}

public class Y
{
}
var q = new[]
{
    new X { Key = "x" },
    new X { Key = "a" },
    new X { Key = "a", Contestants = new List<Y> { new Y() } }
}.AsQueryable();
var groupByKey = q.GroupBy("Key");
var selectQry = groupByKey.Select("new (Key, Sum(np(Contestants.Count, 0)) As TotalCount)").ToDynamicList();

调试结果:

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多