içeren bir Linq ifadesi oluşturma Çalışma zamanı sırasında dinamik olarak Linq ifadeleri oluşturma sorunu üzerine güldüm. Çoğu örnekte, sadece belirli bir veri tabanı varlığının bir özelliğini tek bir parametreyle karşılaştırmanın oldukça basit bir görevini ele aldım. böylece gibi: ayrıca böyle çok daha genel bir yaklaşımla elde edilebilirDinamik olarak bir alt sorguyu
Session.Query.Where(m => m.Name.Contains("test"))
: Ancak
var item = Expression.Parameter(typeof (MyClass), "item");
var property = Expression.Property(item, "Name");
var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var searchExpression = Expression.Constant(searchString, typeof(string));
var containsMethodExpression = Expression.Call(property, containsMethod, searchExpression);
var lambda = Expression.Lambda<Func<MyClass, bool>>(containsMethodExpression, item);
query = query.Where(lambda);
bazen görev biraz daha karmaşıktır ve bir aşağıdaki gibi bir şey elde etmek istiyor:
Session.Query.Where(m => m.SpecialProperty.Any(f => f.Name.Contains("test")));
"SpecialProperty" tipi List <> ve mülkiyet "Ad" taşımaktadır
dize türünde olduğunu.Dinamik olarak böyle bir Linq ifadesi oluşturmak mümkün mü ve bu nasıl başarılabilir? Bu yaklaşımla ilgili herhangi bir performans kaygısı var mı?