LINQ如何选择在哪里?使用过滤器,如果为空值

时间:2017-12-11 14:40:55

标签: linq

我如何做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}}

我收到此错误:

enter image description here

3 个答案:

答案 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();
        }