这就是我如何使用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);
答案 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
)