我在一个网络表单中有四个按钮,它们的作用是分别加载第一条、上一条、下一条和最后一条记录。 他们通过获取表单中加载的当前 ID 并按要求执行操作来实现这一点。我正在使用 Linq to SQL。 下面是我用于 NEXT 记录的代码,如果我想按 ID 加载下一条记录,它可以正常工作。
var dx = new DataModelDataContext();
List<Dog> dogList = dx.Dogs.AsEnumerable().ToList();
try
{
return
dogList.SkipWhile(x => x.Id != dogId).Skip(1).FirstOrDefault().Id.ToString(
CultureInfo.InvariantCulture);
}
catch
{
return null;
}
我重复一遍,对于前面的场景,这段代码工作正常。
情况发生了变化,我现在必须使用前面提到的按钮来检索记录 一个下拉列表,其中包含表单的属性(名字、姓氏、性别等...)因此它不再是一个用于定位的函数 通过 ID 记录下一条记录。
我正在考虑创建一个 LoadNextRecord(searchParameter,TextboxValue) 以便根据属性定位下一条记录 从下拉列表中指定。
但是,是否可以动态指定我要与哪个属性比较我的数据?
示例:x =>x.[searchParameter] != textboxvalue
我知道这可以使用动态 sql...但是我想知道是否可以使用 LINQ。
最佳答案
如果你使用 Dynamic Linq 是可能的.通过 downloading the sample here ,您将在此路径的 zip 文件中找到一个文件:LinqSamples\DynamicQuery\DynamicQuery\dynamic.cs
。通过添加该文件并正确使用,您将获得一些 IQueryable
扩展方法,这些方法允许您以字符串格式表达条件。在 zip 中有关于如何使用的示例。有了这个解决方案,您就会遇到所谓的“魔术字符串”,但并不那么“魔术”,因为 linq 表达式是在幕后编译的。
关于c# - LINQ 中的动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582337/