将条件(字符串)添加到实体 LINQ 查询
本文关键字:实体 LINQ 查询 添加 条件 字符串 | 更新日期: 2023-09-27 18:33:37
这就是我将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);
您可以使用动态 LINQ 执行此操作。
只需Install-Package System.Linq.Dynamic
,包括 System.Linq.Dynamic
命名空间,您将拥有采用字符串并分析它们的 LINQ 方法版本(Where、OrderBy 等)。
对于动态条件,您可以在代码中使用以下更改
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);
}
}
如果你需要更多的控制,这就是我刚刚想出的:
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
)