代码之家  ›  专栏  ›  技术社区  ›  Bob Kaufman

在运行时才知道列名时,如何构造查询?

  •  0
  • Bob Kaufman  · 技术社区  · 14 年前

    鉴于:

    string metadata.XAxisColumn -- contains a column name (e.g., "Date")
    string metadata.YAxisColumn -- contains another columnname (e.g., "Close")
    

    当我知道前面列的名称时,我当然可以做到:

    var query = from record in myView 
        where record.Date >= startDate && record.Date <= endDate
        select record.Close
    

    但是,列名称直到运行时才知道。他们在 metadata.XAxisColumn metadata.YAxisColumn .

    构造这样工作的查询的正确方法是什么:

    var query = from record in myView 
        where record.[metadata.XAxisColumn] >= startDate && record.[metadata.XAxisColumn] <= endDate
        select record.[metadata.YAxisColumn]
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Craig Stuntz    14 年前

    您可以使用esql/querybuilder(内置到ef)或Microsoft动态查询(a.k.a.dynamic linq——通过vs代码库免费)。

        2
  •  1
  •   Kieren Johnstone    14 年前

    可以从“record”对象类型派生,并添加新属性:

    public class MyRecord : RecordBase
    {
        public XAxis
        {
            get
            {
                switch (metadata.XAxisColumn)
                {
                    // for example only; this code will not compile because it depends what kind of object RecordBase is :)
                case X:
                    return this.X;
                case Y:
                    return this.Y;        
                }
            }
        }
    }
    

    希望有帮助!

        3
  •  0
  •   nxt    14 年前

    你可以使用 Dynamic LINQ 对于那些查询