-1

使用 ADO.NET 很容易构建这样的自定义查询:

SqlCommand.CommandText = "SELECT Column" + variable1 + ", Column" + Variable2 + " FROM TABLE";

可以在 LINQ to SQL 中这样做吗?

谢谢

4

2 回答 2

0

不,没有通用的方法来构建动态查询。

方法必须具有已知的特定返回类型。该类型可以是 System.Object 但您必须使用大量丑陋的反射代码才能真正获取成员。在这种情况下,您还必须使用大量丑陋的反射表达式树代码来生成返回值。

如果您尝试在 UI 端动态生成列 - 请停止这样做。在设计时定义列,然后简单地显示/隐藏您实际需要/希望用户看到的列。让您的查询返回所有可能可见的列。

除非您注意到选择所有数据列存在严重的性能问题(在这种情况下,您可能在数据库级别存在未覆盖的索引问题),否则使用这种方法会好得多。动态生成谓词和排序顺序非常好,但您真的不想对输出列表执行此操作。 更多关于这个

于 2012-05-29T14:25:20.887 回答
0

是的,您可以使用Dynamic query with Linq.
这是一个示例,您可以使用以下命令构建自定义查询Dynamic query with Linq

string strWhere = string.Empty;
    string strOrderBy = string.Empty;

    if (!string.IsNullOrEmpty(txtAddress.Text))
        strWhere = "Address.StartsWith(\"" + txtAddress.Text + "\")";  
    if (!string.IsNullOrEmpty(txtEmpId.Text))
    {
        if(!string.IsNullOrEmpty(strWhere ))
            strWhere = " And ";
        strWhere = "Id = " + txtEmpId.Text;
    }
    if (!string.IsNullOrEmpty(txtDesc.Text))
    {
        if (!string.IsNullOrEmpty(strWhere))
            strWhere = " And ";
        strWhere = "Desc.StartsWith(\"" + txtDesc.Text + "\")";
    }
    if (!string.IsNullOrEmpty(txtName.Text))
    {
        if (!string.IsNullOrEmpty(strWhere))
            strWhere = " And ";
        strWhere = "Name.StartsWith(\"" + txtName.Text + "\")";
    }

    EmployeeDataContext edb = new EmployeeDataContext();
    var emp = edb.Employees.Where(strWhere);
    grdEmployee.DataSource = emp.ToList();
    grdEmployee.DataBind();

有关更多信息,您可以查看此页面。

于 2018-08-01T14:08:18.153 回答