【问题标题】:Select Query depending on list values in asp.net根据 asp.net 中的列表值选择查询
【发布时间】:2014-10-14 09:05:47
【问题描述】:

我有一个包含以下列名的 sql 表:c1、c2、c3、c4、c5、c6、c7、c8、c9、c10。我的 Asp.Net 代码 (C#) 中也有一个列表。

        public static List listColumns = new List();

而 listColumns 随机包含 c1, c2.. c10。例如,它可以包含 c1、c5、c6、c9。我想用这个条件进行查询。所以,如果列表有这些值,我的查询应该是:

SELECT c1, c5, c6, c9 FROM Table

listColumns 可能包含不同的值并具有不同的计数。我怎样才能定期进行此查询?

【问题讨论】:

  • 使用 stringbuilder 并循环列表
  • 你可以使用 string.Join 方法。
  • 大多数时候我看到像c1....c100 这样的列实际上应该是一个通过外键链接到该表的关系表。你应该重构你的模型,这个过程被称为normalization。那么您的查询将变为:Select value From T2 WHERE t1Id=@IDSelect value FROM T2 WHERE t1IDs IN(1,5,6, 9)
  • 你是如何查询数据库的?通过 Linq 或 ADO.NET?你对结果做了什么 - 绑定一些东西?

标签: c# sql asp.net sql-server-2008


【解决方案1】:

尝试类似...

List<string> columnNames = new List<string> {"c1", "c2", "c4"};
string result = string.Join(", ", columnNames);

string sql = "SELECT " + result + " FROM Table";

【讨论】:

    【解决方案2】:

    如果您只有十列,将它们全部返回并在代码中选择您需要的那些可能更有意义。

    例如,如果您将GridView 之类的内容绑定到您的结果,您可以通过编程方式创建绑定列(免责声明:这是来自内存):

    var data = GetData();  // Get all 10 of your columns
    
    var gridView = new GridView() { Id = "gridView1", AutoGenerateColumns = false };
    foreach(var colName in listColumns)
    {
       gridView.Columns.Add(new BoundField() { DataField = colName });
    }
    gridView.DataSource = data;
    gridView.DataBind();
    

    【讨论】:

      【解决方案3】:

      试试这样的:

      sSQL = "SELECT [MIS.System.Beneficiaries].[ID] As '  الرقم التسلسلي '" _
                           + FullName + NationalNumber + Gender + YearOfBirth + phone + Email + RelativePhoneNumber + Districts + City + Address + Date1 + Time + AuditName + VistNumber + SupervisorName + Benfishrieshere +
                           "  FROM [MIS.System.Beneficiaries] INNER JOIN [MIS.Lookup.Districts] on [MIS.System.Beneficiaries].DistrictID=[MIS.Lookup.Districts].ID INNER JOIN [MIS.Lookup.Gender] on [MIS.System.Beneficiaries].GenderID=[MIS.Lookup.Gender].ID   LEFT JOIN  [dbo].[MIS.System.Beneficiaries.SpotCheck] on [MIS.System.Beneficiaries].ID =[MIS.System.Beneficiaries.SpotCheck].BenfiiciriesID  WHERE  [dbo].[MIS.System.Beneficiaries.SpotCheck].[Date] > Convert(datetime,'" + textbox6_1.Text + "')  AND [dbo].[MIS.System.Beneficiaries.SpotCheck].[Date] < Convert(datetime,'" + textbox2.Text + "') AND  [dbo].[MIS.System.Beneficiaries.SpotCheck].[CompanyID] ='" + DropDownList4.SelectedValue + "'   "
      

      【讨论】:

      • 您能否添加一些词来描述您的解决方案如何解决问题?
      猜你喜欢
      • 2014-12-15
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多