プロパティ名 (文字列) とフィルターを希望する値だけを持っている状況があります。true
名前が繰り返された場合にリストをフィルタリングして返す必要があります。
フィルターはそれを自分で除外する必要があることに注意してください。次のような表現で:p => p.Id != currentId
コード
プロパティは文字列であるため、この問題を解決するために動的式を作成することにしました。
[TestMethod]
public void TestingExpression()
{
// Arrange
var fix = new Fixture();
var list = fix.Build<User>()
.With(p => p.Name)
.OmitAutoProperties()
.CreateMany(20).AsQueryable(); // Create IQueryable<User> with 20 users
// Act
var currentId = 2;
var uniquePropName = "Name";
var uniqueValue = "{NotFoundValue}";
// Expression: p => p.Id != currentId
ParameterExpression pId = Expression.Parameter(typeof(int), "Id");
ConstantExpression cId = Expression.Constant(currentId, typeof(int));
BinaryExpression notCurrent = Expression.NotEqual(pId, cId);
Expression<Func<int, bool>> NotCurrentExpr =
Expression.Lambda<Func<int, bool>>(
notCurrent,
new ParameterExpression[] { pId });
// Expression: p.{uniquePropName} == {uniqueValue}
ParameterExpression pUnique = Expression.Parameter(typeof(string), uniquePropName);
ConstantExpression cUnique = Expression.Constant(uniqueValue, typeof(string));
BinaryExpression checkUnique = Expression.Equal(pUnique, cUnique);
Expression<Func<string, bool>> CheckUniqueExp =
Expression.Lambda<Func<string, bool>>(
checkUnique,
new ParameterExpression[] { pUnique });
var exp = Expression.And(NotCurrentExpr, CheckUniqueExp);
// Asset
list.Provider.CreateQuery<User>(exp).ToList()
.Should().HaveCount(19);
}
質問
目標は、動的式を次のように作成することです。query.Any(p => p.Id != id && p.{Dynamic} == nome);
しかし、私は続ける方法がわからない..
ありがとう