c# - LINQ 中的动态查询

标签 c# linq linq-to-sql

我在一个网络表单中有四个按钮,它们的作用是分别加载第一条、上一条、下一条和最后一条记录。 他们通过获取表单中加载的当前 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/

相关文章:

c# - 转换为自定义类型、Enumerable.Cast<T> 和 as 关键字

c# - Linq:数据表到列表。 Actor 阵容问题

linq-to-sql - 如何在 linq to sql 中执行全选(*)

c# - Windows Phone Longlistselector ItemsSource Performance

c# - Azure AD 未在 .NET Core 3.1 中进行身份验证

c# - ASP.NET 应用程序中的新线程看不到 web.config appsettings'm

c# - 获取本地照片 Windows Phone 8 模拟器

c# - AsParallel - Linq Where 子句性能之前与之后

c# - 更新 IQueryable 对象中的值

c# - 如何在 LINQ 中使用 OUT 参数