C # Как передать переменную в функцию? - PullRequest
0 голосов
/ 10 июля 2019

Простая версия

var myVar = some object;

myList.Where(element => myVar != null && element.Name == myVar.Name)

То, что я хочу написать

public static (Return Value) Start<T>(this T input, Func<(IDK what goes here)> exp)
{
   var theVar = somehow get the myVar that was passed in;
   if (theVar != null)
   {
       apply exp; <= I can do this part
   }
}

myList.Start((myVar, element) => element.Name == myVar.Name)); 

По сути, можно написать выражение без необходимости проверять нулевое значение каждый раз.

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Использовать анонимную лямбду (думаю без тестирования)>

myList.Start((myVar, () => element) => element.Name == myVar.Name)); 
0 голосов
/ 11 июля 2019

Я нашел способ, я написал класс BaseExtension, в котором не так уж много, просто держатель для некоторых свойств

public static BaseExtension<T> Start<T, TValue>(this IQueryable<T> input, TValue value, Func<TValue, Expression<Func<T, bool>>> expression) =>
        new BaseExtension<T>(input, value == null ? null : expression.Invoke(value));

это позволяет мне писать

_context.MyEntities.Start(myVar, value => entity => entity.Id.ToString() == myVar)

и передача в myVar позволяет мне делать c # логику за кулисами, прежде чем запрос будет выполнен в базе данных.

Примером может быть myVar! = Null, или я могу добавить пользовательскую функцию, которая будет применять выражение или нет

0 голосов
/ 10 июля 2019

Метод where ожидал логического типа, вы можете использовать это

  private static <type> <name>(<type> arg)
        {
            return true;
        }

Если это не сработает для вас, в Visual Studio напишите что-нибудь изнутри и нажмите Ctrl +. ,

См. Предлагаемые реализации

...