patterncsharpMinor
Refactor IQueryable and IEnumerable that share the same condition
Viewed 0 times
sametheconditioniqueryablethatshareandrefactorienumerable
Problem
I have extension methods to encapsulate query conditions, however I have to separate
IQueryable and IEnumerable. Is there any way I can reduce the redundancy and still not lose the performance benefit of IQueryable?public static class PAYTRACK_PARTNER_Extension
{
public static IQueryable WhereInPayer(this IQueryable query, int payerId)
{
var result = query.Where(q => q.payer_id == payerId);
return result;
}
public static IEnumerable WhereInPayer(this IEnumerable query, int payerId)
{
var result = query.Where(q => q.payer_id == payerId);
return result;
}
public static IQueryable WhereInPayee(this IQueryable query, int payeeId)
{
var result = query.Where(q => q.payee_id == payeeId);
return result;
}
public static IEnumerable WhereInPayee(this IEnumerable query, int payeeId)
{
var result = query.Where(q => q.payee_id == payeeId);
return result;
}
public static IQueryable WhereIsNotApproved(this IQueryable query)
{
var result = query.Where(q => q.partner_is_approve.GetValueOrDefault(false).Equals(false));
return result;
}
public static IEnumerable WhereIsNotApproved(this IEnumerable query)
{
var result = query.Where(q => q.partner_is_approve.GetValueOrDefault(false).Equals(false));
return result;
}
public static PAYTRACK_PARTNER SingleByPayerAndPayee(this IQueryable query, int payerId, int payeeId)
{
var result = query.Single(q => q.payer_id == payerId && q.payee_id == payeeId);
return result;
}
public static PAYTRACK_PARTNER SingleByPayerAndPayee(this IEnumerable query, int payerId, int payeeId)
{
var result = query.Single(q => q.payer_id == payerId && q.payee_id == payeeId);
return result;
}
}Solution
You can use
Also, names in ALL_CAPS are not commonly used in C#, you should adopt c# naming conventions.
IQueryable everywhere, because you can convert to it from IEnumerable by using AsQueryable():public static IQueryable WhereInPayer(
this IQueryable query, int payerId)
{
var result = query.Where(q => q.payer_id == payerId);
return result;
}
public static IEnumerable WhereInPayer(
this IEnumerable query, int payerId)
{
return query.AsQueryable().WhereInPayer(payerId);
}Also, names in ALL_CAPS are not commonly used in C#, you should adopt c# naming conventions.
Code Snippets
public static IQueryable<PAYTRACK_PARTNER> WhereInPayer(
this IQueryable<PAYTRACK_PARTNER> query, int payerId)
{
var result = query.Where(q => q.payer_id == payerId);
return result;
}
public static IEnumerable<PAYTRACK_PARTNER> WhereInPayer(
this IEnumerable<PAYTRACK_PARTNER> query, int payerId)
{
return query.AsQueryable().WhereInPayer(payerId);
}Context
StackExchange Code Review Q#28276, answer score: 5
Revisions (0)
No revisions yet.