2014-12-09 56 views
0

这是我如何使用LINQ与我的实体。我想要做的就是能够有条件地添加条件。我有条件的字符串。例如notes == 'some words'DokumentID == 4。我很乐意在linQ中以某种方式使用它。我可以在两个不同的字符串中提供数据库中列的名称和值。但是我仍然不知道如何将它添加到我的linq中。 下面是从程序我的代码:添加条件(字符串)到实体LINQ查询

 ListImport.Clear(); 
     using (var db = new Minorlex_MPIPSEntities()) 
     { 

      var query = from s in db.tbl_Dokumenty 
         where s.IdDokumentu == 15 
         select s; 

      foreach (tbl_Dokumenty Dokument in query) 
      { 
       ListImport.Add(Dokument); 
      } 
     } 

,我想尝试,如果我可以把变量字符串,并在这里使用它像状态。在字符串中使用变量并将其提供给linq并添加条件。

query.Where(x => x.status < 0);

+0

您是否可以将列名和列值分解为单独的操作数,还是总是以单个字符串形式出现? – 2014-12-09 13:01:07

+0

他们实际上是分开的。列名和值是2个不同的字符串。 – Whencesoever 2014-12-09 13:04:16

回答

2

你可以做到这一点与动态LINQ。

只需Install-Package System.Linq.Dynamic,包括System.Linq.Dynamic命名空间,并且您将拥有LINQ方法(Where,OrderBy等)的版本,它们会接受字符串并对其进行解析。

+1

它会以各种方式解决我的问题。谢谢 – Whencesoever 2014-12-09 13:06:47

0

动态条件下,你可以使用如果你需要更多的控制在下面的代码

ListImport.Clear(); 
    using (var db = new Minorlex_MPIPSEntities()) 
    { 

     var query = from s in db.tbl_Dokumenty 
        where s.IdDokumentu == 15 || s.DynamicCondition 
        select s; 

     foreach (tbl_Dokumenty Dokument in query) 
     { 
      ListImport.Add(Dokument); 
     } 
    } 
0

的变化,这是我刚刚想出了:

private IList<TEntity> Condition<TEntity, TProperty>(Expression<Func<TEntity, TProperty>> propertySelector, TProperty propertyValue) 
     where TEntity :class 
    { 
     PropertyInfo property = (PropertyInfo)((MemberExpression)propertySelector.Body).Member; 
     ParameterExpression typeParameter = Expression.Parameter(typeof(TEntity)); 

     MemberExpression propertyExpression = Expression.Property(typeParameter, property); 

     using (Minorlex_MPIPSEntities entities = new Minorlex_MPIPSEntities()) 
     { 

      BinaryExpression criteriaExpression = 
       Expression.Equal(propertyExpression, Expression.Constant(propertyValue)); 

      Expression<Func<TEntity, bool>> condition = 
       Expression.Lambda<Func<TEntity, bool>>(criteriaExpression, typeParameter); 

      IEnumerable<TEntity> query = entities.Set<TEntity>().Where(condition); 

      return query.ToList(); 
     } 
    } 

只是传递一个属性选择表达和价值。 您可以使用自定义操作集扩展该方法(现在有简单的相等性,请参见criteriaExpression