使用 ADO.NET 很容易构建这样的自定义查询:
SqlCommand.CommandText = "SELECT Column" + variable1 + ", Column" + Variable2 + " FROM TABLE";
可以在 LINQ to SQL 中这样做吗?
谢谢
使用 ADO.NET 很容易构建这样的自定义查询:
SqlCommand.CommandText = "SELECT Column" + variable1 + ", Column" + Variable2 + " FROM TABLE";
可以在 LINQ to SQL 中这样做吗?
谢谢
不,没有通用的方法来构建动态查询。
方法必须具有已知的特定返回类型。该类型可以是 System.Object 但您必须使用大量丑陋的反射代码才能真正获取成员。在这种情况下,您还必须使用大量丑陋的反射表达式树代码来生成返回值。
如果您尝试在 UI 端动态生成列 - 请停止这样做。在设计时定义列,然后简单地显示/隐藏您实际需要/希望用户看到的列。让您的查询返回所有可能可见的列。
除非您注意到选择所有数据列存在严重的性能问题(在这种情况下,您可能在数据库级别存在未覆盖的索引问题),否则使用这种方法会好得多。动态生成谓词和排序顺序非常好,但您真的不想对输出列表执行此操作。 更多关于这个
是的,您可以使用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();
有关更多信息,您可以查看此页面。