【问题标题】:Filtering with Expression<Func<TModel>> using view model使用视图模型过滤 Expression<Func<TModel>>
【发布时间】:2020-01-19 03:50:39
【问题描述】:

我有一种在数据库中对表进行分页的方法。分页部分并不重要,所以唯一的重点是过滤部分。

由于来自 Entity Framework Core 的 Where 方法要求 Expression&lt;Func&lt;T&gt;&gt; 作为参数,而 T 是一个实际模型,并且我在控制器中有要求有效视图模型的操作,我如何使用该视图模型来生成Expression&lt;Func&lt;T&gt;&gt; 来自那个视图模型?

我希望能够根据视图模型中的填充参数过滤表格。

【问题讨论】:

  • 您能否为您的问题添加更多详细信息?

标签: c# entity-framework-core filtering


【解决方案1】:

你基本上需要Expression&lt;Func&lt;YourModel, bool&gt;&gt;。您构建一个过滤器以传递给 EF。以下信息足以让您入门。

所以想象一下你有一个像下面这样的类。这可以是任何类,而不仅仅是 ViewModel。

public class Person
{
 public int Id {get;set;}
 public string Name {get;set;}
}

表达式看起来像这样。

Expression<Func<Person,bool>> predicate = p => p.Name == "Some name";
db.People.Where(predicate); // How you would use it in a db context

您也可以查看使用 LinqKit 的此链接。您不必使用 LinqKit,但有一些很好的示例 http://www.albahari.com/nutshell/linqkit.aspx

我希望能够根据视图模型中的填充参数过滤表格。

由于您想要上述内容,您可以附加到您的 predicate 并将其作为一个传递给您的 Where,Any,Count...。 您可以在这里看到很多如何附加到您的过滤器的技术: How to Append to an expression

我最喜欢的追加方式是使用 linqkit 谓词生成器 http://www.albahari.com/nutshell/predicatebuilder.aspxabove link 中展示了许多技术,包括谓词构建器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多