Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple LINQ to SQL extension method

How would I write a simple LINQ to SQL extension method called "IsActive" which would contain a few basic criteria checks of a few different fields, so that I could reuse this "IsActive" logic all over the place without duplicating the logic.

For example, I would like to be able to do something like this:

return db.Listings.Where(x => x.IsActive())

And IsActive would be something like:

public bool IsActive(Listing SomeListing)
{
    if(SomeListing.Approved==true && SomeListing.Deleted==false)
        return true;
    else
        return false;
}

Otherwise, I am going to have to duplicate the same old where criteria in a million different queries right throughout my system.

Note: method must render in SQL..

like image 242
Aaron Avatar asked Apr 14 '26 06:04

Aaron


1 Answers

Good question, there is a clear need to be able to define a re-useable filtering expression to avoid redundantly specifying logic in disparate queries.

This method will generate a filter you can pass to the Where method.

public Expression<Func<Listing, bool>> GetActiveFilter()
{
  return someListing => someListing.Approved && !someListing.Deleted;
}

Then later, call it by:

Expression<Func<Filter, bool>> filter = GetActiveFilter()
return db.Listings.Where(filter);

Since an Expression<Func<T, bool>> is used, there will be no problem translating to sql.


Here's an extra way to do this:

public static IQueryable<Filter> FilterToActive(this IQueryable<Filter> source)
{
  var filter = GetActiveFilter()
  return source.Where(filter);
}

Then later,

return db.Listings.FilterToActive();
like image 143
Amy B Avatar answered Apr 17 '26 03:04

Amy B



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!