简体   繁体   中英

how to generate where condition without multiple if condition using linq query

I have 3 search textbox values. i need to check string.isnullorEmpty for each variable and have to compare with the linq query.

My Text Values:

  1. Manufacturer

  2. Project Code

  3. PartNo

Conditions:

  1. if i search any one of the above i should get the result

  2. If i enter 3 box values i should get the result

  3. If i enter any 2 then i should get result.

My code as follows

if (!string.IsNullOrEmpty(manufacturer))
        {
            var filteredResult = _entity.MaterialMasters.Where(x => x.Manufacturer == manufacturer);
        }
if (!string.IsNullOrEmpty(projectcode))
        {
            var filteredResult = _entity.MaterialMasters.Where(x => x.ProjectCode== projectcode);
        }
if (!string.IsNullOrEmpty(part))
        {
            var filteredResult = _entity.MaterialMasters.Where(x => x.Part== part);
        }

To avoid multiple conditions how to make dynamic where clause for this? Please find out the solution for this..

He wants to get rid of the if statements and write this all as a linq query. I think you want something like this

.Where(
s =>
(string.IsNullOrEmpty(manufacturer) | (s.Manufacturer == manufacturer)) &&
(string.IsNullOrEmpty(projectcode) | (s.ProjectCode == projectcode)) &&
(string.IsNullOrEmpty(part) | (s.Part== part))
).ToList();

You can just tag on multiple Where clauses

var filteredResult = _entity.MaterialMasters;
if (!string.IsNullOrEmpty(manufacturer))

    filteredResult = filteredResult.Where(x => x.Manufacturer == manufacturer);
}
if (!string.IsNullOrEmpty(projectcode))

    filteredResult = filteredResult.Where(x => x.ProjectCode == projectcode);
}
if (!string.IsNullOrEmpty(part))

    filteredResult = filteredResult.Where(x => x.Part == part);
}

They will work cumulatively, meaning that you can supply 1, 2 or 3 of the parameters and you'll get the appropriate results.

var filteredResult =
               _entity.Where(
                ent =>
                (!string.IsNullOrEmpty(manufacturer) && ent.Manufacturer == manufacturer)
                || (!string.IsNullOrEmpty(projectcode) && ent.ProjectCode == projectcode)
                || (!string.IsNullOrEmpty(part) && ent.Part == part));

This will get you any result for manufacturer, projectCode and part in one place.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM