【问题标题】:Create LINQ statement with variable column names [duplicate]使用可变列名创建 LINQ 语句 [重复]
【发布时间】:2014-09-10 14:29:26
【问题描述】:

我正在为平面表创建树视图。我有一个 linq 查询,它从列中返回所有不同的值

        public ActionResult Index()
    {
        var result = (from i in db.Items
                     select i.GeoName)
                     .Distinct()
                     .OrderBy(n => n);

        return View(result);
    }

这当然会返回一个带有我的起始节点的视图(假设是“Node1”、“Node2”和“Node3”)。

然后我想让用户点击一个节点,并返回该列的内容。

你如何动态地做到这一点?

我希望它像以下那样简单(很可能,我不知道 - LINQ newb!):

        public ActionResult Index()
    {
        var result = (from i in db.Items
                     select i.passedInColumnName)
                     .Distinct()
                     .OrderBy(n => n);

        return View(result);
    }

与往常一样,在此先感谢各位乐于助人的人。

【问题讨论】:

  • 查看动态 LINQ
  • 您肯定总是希望返回相同的列(即select),但又想限制返回的范围(即应用where 子句)?
  • 一种更简单的方法可能是在初始视图中加载您想要的所有列,并根据节点单击显示或隐藏列,而不是每次调用索引
  • 不幸的是,这是一张巨大的桌子。加载所有字段需要很长时间,我通过 ajax 加载取决于单击的节点。
  • @theDarse - 我实际上没有返回相同的列(在第一个节点中,我正在显示名为“GeoNode”的列中包含的不同值)。然后,根据选择的节点,我想显示与该节点对应的列中包含的所有不同值。

标签: c# linq


【解决方案1】:

您可以使用Expression Trees 执行此操作,但它非常深入,我建议您使用 SQL,因为 Linq 并不是您想要做的最佳解决方案。

用于此的 SQL 将是:

SELECT DISTINCT
    passedInColumnName
FROM
    Items
WHERE
    GeoName = 'the geo name'
ORDER BY
    passedInColumnName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多