【问题标题】:Linq to Sql- Dynamic column selectLinq to Sql-动态列选择
【发布时间】:2016-05-17 23:47:01
【问题描述】:

我正在研究 Linq-to-Sql,试图获取传递动态 obj 参数的列名(每次都更改)。我需要选择定义动态 obj 数组的列名。

P.S: 我需要同时选择 sku,vendorname,vendorstylecode

“where”子句条件工作正常,但我需要选择在 data.col 索引中定义的特定列

我尝试了下面的代码但没有帮助我:

public HttpResponseMessage PostGenerateFile([FromBody] dynamic data) {
string[] vendorname = data.vendorname != null ?data.vendorname.ToObject<string[]>() : null;
string[] brandname = data.brandname != null ? data.brandname.ToObject<string[]>() : null;

using (var context = new Vendor_InvDataContext())
        { var query = context.AllInventories.AsQueryable();


            for (int i = 0; i < data.col.Count; i++)
            {
                if(data.col[i]=="SKU")
                   query.Select(s => s.SKU);
                if (data.col[i] == "VENDORNAME")
                    query.Select(s => s.VENDORNAME);
                if (data.col[i] == "VENDORSTYLECODE")
                    query.Select(s => s.VENDORSTYLECODE);
                if (data.col[i] == "STYLECODE")
                    query.Select(s => s.STYLECODE);
                if (data.col[i] == "STYLENAME")
                    query.Select(s => s.STYLENAME);
            }

 if (vendorname != null && vendorname.Length > 0)
            {
                query = query.Where(s => vendorname.Contains(s.VENDORNAME));
            }
            if (brandname != null && brandname.Length > 0)
            {
                query = query.Where(s => brandname.Contains(s.BRANDNAME));
            }
var items = query.ToList();

【问题讨论】:

    标签: c# sql-server linq dynamic


    【解决方案1】:

    您需要将 query.Select(...) 的结果分配给查询变量以实际更改查询,在您的情况下您没有这样做,因此您的 Select 没有任何效果。但是一旦你这样做了,你就会有一个结果的投影,其余的字段既不能向投影添加更多的字段,也不能添加 where 条件。

    所以这种方法永远不会适用于 Select 语句。您需要构建一个动态表达式树来选择所需的属性。幸运的是,有人已经在这个here 上工作过,请看@dotlatice 的答案,这是你需要的。

    所以,你的代码是:

    1. 像现在这样应用 where 条件
    2. 构建一个表达式树,生成包含所需列的匿名类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多