2014-12-09 34 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