Ich habe eine Methode mit den folgenden Signaturen, die einen C# AusdruckNull Ausdruck mit dynamischen LINQ
Expression<Func<T, bool>> GetExpression<T>(IList<Filter> filters)
dann den folgenden Code zurückgeben, die dynamischen LINQ verwendet
using (TestContext tEntities = new TestContext())
{
var filterExp = Exp.ExpressionBuilder.GetExpression<Client>(filters);
var filteredCollection = tEntities.Client.Where(filterExp);
IQueryable<Client> queryResult;
if (filterExp == null)
queryResult = tEntities.Client;
else
queryResult = tEntities.Client.Where(filterExp);
}
Dies ist ein einfaches Szenario. Ich habe Abfragen, die 50 Zeilen lang sind manchmal mehr. Ich möchte vermeiden, den gleichen Code zweimal mit nur Unterschied zu haben, die where-Klausel verwendend.
Weiß jemand, ob ich etwas anderes erreiche?
from product in context.Product.Where(deleg)
.Include(x => x.Type)
.Include(x => x.Category)
.Include(x => x.WareHouse)
.Include(x => x.Photos)
join f in context.Favorite on product.Id equals f.ProductFid into fg
from fgi in fg.Where(f => f.UserFid == userId).DefaultIfEmpty()
orderby product.Id descending
select new ProductngDto()
{
ProductItem = product,
FavoriteId = fgi != null ? fgi.Id : (long?)null
}).Skip(page * pageSize).Take(pageSize);
Vielen Dank im Voraus
Es ist nicht wirklich klar ist, was Sie fragen, aber ich denke, Sie wollen: 'IQueryable queryresult = tEntities.Client ; ' ' if (filterExp! = Null) {' ' queryResult = queryResult.Where (filterExp); ' '} ' –
zaitsman
@zaitsman Ich denke, er möchte nicht, dass sein Code mit nur einem kleinen Unterschied wiederholt wird die Where-Klausel. Dein Kommentar wird ihm sicherlich helfen. – Aamerallous