我如何做LINQ Querie。
public class FilterGeneric
{
public DataCollectionType.FiltrosPdf Tipo { get; set; }
public string PdfTitle { get; set; }
public string pdfDescription { get; set; }
public string Nombre { get; set; }
public string Cargo { get; set; }
public string Iniciales { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public bool? Enabled { get; set; }
public DateTime? Date_since { get; set; }
public DateTime? Date_to { get; set; }
public string RoleName { get; set; }
public string Id_Sucursal { get; set; }
public string RUC { get; set; }
public string Direccion { get; set; }
public int? Direccion_Nro { get; set; }
public string Telefono { get; set; }
public int? Id_Localidad { get; set; }
}
当一些attributs可以使用Null Value时有许多过滤器。 例如: 我的FilterGeneric类有许多属性接受Null。
if (Filter.Nombre != null)
{
query = query.Where(i => i.Nombre == Filter.Nombre);
}
这可能吗?谢谢大家的倾听。
更新:
我用Answers测试
1#:
List<ApplicationUser> ListaUsuarios = AccountControl.UserManager.Users.Where
(x =>
(x.Nombre == Filter.Nombre || string.IsNullOrEmpty(Filter.Nombre)) &&
(x.Nombre == Filter.Cargo || string.IsNullOrEmpty(Filter.Cargo)) &&
(x.Nombre == Filter.Iniciales || string.IsNullOrEmpty(Filter.Iniciales)) &&
(x.Nombre == Filter.UserName || string.IsNullOrEmpty(Filter.UserName))
).ToList();
2#:
{{1}}
我收到此错误:
答案 0 :(得分:2)
您需要按以下方式逐个添加所有过滤器:
browser.get('https://www.google.com')
这个告诉你,如果List<ApplicationUser> ListaUsuarios =
AccountControl.UserManager.Users
.Where(
i =>
(i.Nombre == Filter.Nombre || string.IsNullOrEmpty(Filter.Nombre))
&&
(i.Cargo == Filter.Cargo || string.IsNullOrEmpty(Filter.Cargo))
).ToList();
为空/空,则忽略它。 Filter.Nombre
的情况相同,依此类推。
Filter.Cargo
nullable int
答案 1 :(得分:2)
当您调用实现它的内容(例如.ToList()
,ToArray()
或foreach
)时,查询会实现(意味着执行),您可以有条件地链接它们:< / p>
IEnumerable<ApplicationUser> query = AccountControl.UserManager.Users;
if(Filter.Nombre != null)
{
query = query.Where(i => i.Nombre == Filter.Nombre);
}
List<ApplicationUser> ListaUsuarios = query.ToList();
答案 2 :(得分:1)
我认为,您可以动态使用Reflection
执行此操作;
//Determine the not null properties of Filter object
var notNullProperties = Filter.GetType().GetProperties().Where(x => x.GetValue(Filter) != null).ToList();
//Perform where clause for not null properties of Filter
if (notNullProperties.Count > 0)
{
var ListaUsuarios = AccountControl.UserManager.Users.Where(x =>
notNullProperties.All(n => n.GetValue(Filter) == x.GetType().GetProperty(n.Name).GetValue(x))).ToList();
}