public void ChangeInputType_Default_ReturnsExpectedResult() { // arrange var collection = new[] { new T2 { Foo = "Foo" }, new T2(), new T2 { Foo = "Bar" }, new T2 { Foo = "Baz" }, }; Expression <Func <T1, bool> > filter = p => p.Foo == "Bar"; // act var result = ExpressionHelper.ChangeInputType <T1, T2, bool>(filter); // assert collection.AsQueryable().Where(result).Should().ContainSingle(r => r.Foo == "Bar"); }
/// <summary> /// Konkretisiert den Typen des Parameters der Expression. /// </summary> /// <typeparam name="TBefore">Typ des Parameters in der ursprünglichen Expression.</typeparam> /// <typeparam name="TAfter">Konkreterer Typ für den Parameter der resultierenden Expression.</typeparam> /// <typeparam name="TResult">Typ des Rückgabewerts der Expression.</typeparam> /// <param name="expression">Expression, deren Parametertyp konkretisiert werden soll.</param> /// <returns>Expression, die identisch zur ursprünglichen Expression ist, aber einen konkreteren Parametertypen definiert.</returns> /// <remarks>Zur Verwendung von allgemein definierten Expressions für konkretere Typen, da die Kovarianz nicht automatisch aufgelöst werden kann.</remarks> public static Expression <Func <TAfter, TResult> > ChangeInputType <TBefore, TAfter, TResult>(this Expression <Func <TBefore, TResult> > expression) where TAfter : TBefore { return(ExpressionHelper.ChangeInputType <TBefore, TAfter, TResult>(expression)); }