【问题标题】:How to make a dynamic where clause: linq to sql如何制作动态 where 子句:linq to sql
【发布时间】:2011-06-29 03:32:09
【问题描述】:

我有以下 linq 查询:

        Dim q = From definition In definitionList _
            Where definition.ValueDefName.Contains(criteria) _
            Select definition.ValueDefName, definition.ValueDefDesc, definition.DateCreated, _
            definition.StrategicInitiative, definition.ValueWikiURL, definition.ValueDefinitionStatusID, _
            definition.Aliaslist

我已经研究过这个答案:Dynamic WHERE clause in LINQ

不幸的是,它不适用于使用 .net 4.0 的我。当我尝试在其中传递条件字符串时,它会要求一个谓词。最终目标是添加以下任何一项:

  1. definition.ValueDefname.Contains(条件)
  2. definition.ValueDefDesc.Contains(criteria)
  3. definition.Aliaslist.Contains(Criteria)
  4. definition.StrategicInitiative.Contains(Criteria)

根据用户选择的复选框传递到查询中。如何在 linq to sql 中创建动态 where 子句?是否有将 where 子句作为字符串传递的新语法?

【问题讨论】:

    标签: asp.net vb.net linq-to-sql


    【解决方案1】:

    对于 LINQ to SQL,动态 LINQ 方法是将字符串作为 Where 子句传递的唯一选项。或者,Where 子句采用一个表达式,您可以使用这种方法动态构建一个表达式:http://msdn.microsoft.com/en-us/library/bb882637.aspx

    我使用 Entity Framework 完成了这项工作,我相信这也适用于 LINQ to SQL。

    HTH。

    【讨论】:

      【解决方案2】:

      不能 100% 确定这能满足您的需求,但我们使用传递给我们的搜索方法的 lambda 表达式函数:

      在我们的存储库类中:

      public override IEnumerable<KeyCode> FindAll(Expression<Func<KeyCode, bool>> filter)
      {
          return GetAll().AsQueryable().Where(filter);
      }
      

      在其他地方

      KeyCodeRepository keycodeRepository = new KeyCodeRepository(unitOfWork);
      IEnumerable<KeyCode> keyCodes = keycodeRepository
          .FindAll(k => k.FlowStatus.Value == (int)FlowStatusType.Active 
                                          && k.AppSystem.Id == appSystemId);
      

      表达式

      k.FlowStatus.Value == (int)FlowStatusType.Active && k.AppSystem.Id == appSystemId
      

      作为表达式传入 FindAll 方法中的 Where 子句。这允许我们在调用 FindAll() 的任何时候动态确定我们的过滤器;

      【讨论】:

      • 我不小心点击了向下箭头。我无法撤消。对不起
      • 为你解开那个向下箭头:)
      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2013-11-25
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多