Я надеюсь, что кто-то сможет сказать мне, если а) то, что я пытаюсь достичь, возможно, и б) как это сделать.
У меня есть частная собственность, определенная вкласс типа, который фактически является списком строк, и в нем есть методы, определенные для него, которые позволяют выполнять поиск в списке на заказ.Могу ли я использовать их в лямбда-выражении?
Например, если у меня есть класс
public class SomeExampleClass : ISomeExampleClass
{
private readonly IAlistOfBespokeStringsObject _aListOfBespokeStringsObject
И тип свойства AListOfBespokeStringsObject
определяется как (он фактически принимает списокзначений из базы данных и заполняет ее):
public class AListOfBespokeStringsObject : IAlistOfBespokeStringsObject
{
private List<string> _listOfBespokeStrings;
public AListOfBespokeStringsObject()
{
var db = new ListOfBespokeStringsContext();
_listOfBespokeStrings = db.BespokeString.Select(a => a.String.Replace(" ",string.Empty)).ToList<string>();
}
public Boolean CheckBespokeStringList(string stringToBeChecked)
{
return _listOfBespokeStrings.Any(a => a.Equals(stringToBeChecked.Replace(" ","")));
}
}
Возвращаясь к SomeExampleClass, я использую его как своего рода механизм правил, где перечисляются правила и текст правила (в виде строки) передается в лямбда-выражение следующим образом (обратите внимание, что набор данных - это просто тип, из которого состоят наборы коллекционных данных):
foreach (var Rule in _rules)
{
var dataSets = mydatasets.AsQueryable();
var exp = Rule.QueryText;
var typ = Expression.Parameter(typeof(dataset), "p");
var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] {typ}, null, exp);
dataSets.Where((Expression<Func<dataset, bool>>) e).ToList().ForEach(b =>
{
*some course of action*
});
}
Большинство правил довольно просты 'p.type == \ "3 \" 'или тому подобное.Однако один из них должен выглядеть примерно так:
_listOfBespokeStringsObject.CheckBespokeStringList(p.StringToBeChecked) == true
, где он вызывает метод CheckBespokeStringList локального свойства, чтобы найти совпадение в моем списке строк, производных от базы данных, хотя и со всеми удаленными пробелами.
Я довольно новичок в .net, так что я до сих пор не до конца осознаю ограничения на него!