向实体LINQ查询添加条件(字符串)

时间:2014-12-09 12:45:11

标签: c# string linq entity-framework select

这就是我如何使用linq与我的实体。我想做的就是能够添加条件。我有条件的字符串。例如notes == 'some words'DokumentID == 4。我很想在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);

3 个答案:

答案 0 :(得分:3)

您可以使用Dynamic LINQ执行此操作。

只需Install-Package System.Linq.Dynamic,包含System.Linq.Dynamic命名空间,您将拥有带有字符串并解析它们的LINQ方法(Where,OrderBy等)的版本。

答案 1 :(得分: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);
        }
    }

答案 2 :(得分: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