多个参数的C#Lambda表达式

时间:2017-03-26 22:37:14

标签: c# lambda

我正在制作一个方法来定义(在内存中创建以供以后使用)一个具有一些特定变量的对象,以及另一个我将用于比较的对象。

例如:

public class User
{
    public int UserID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

// - The method
public bool IDontKnowWhatImDoing<T>(??) where T : class
{
}

??是我遇到问题的地方。我有另一种方法:

public ThisWorks<T>(Expression<Func<T, bool>> expression) where T : class
{
}

我称之为:

ThisWorks<User>(u => u.UserID == 1 && u.Age >= 20);

获取UserID为1且Age等于或大于20的所有用户。 现在我想要能够做到这一点或接近这个的东西:

NoClue<User>(u => { u.UserID = 1, u.Name = "Whois" });

public void TheFunctionIWishFor<T>(??, Expression<Func<T, bool>> expression) where T : class
{
    // - The ?? part is where I want to get a T from
    // - with the specified values above (UserID 1 and "Whois" Name)
}

如果可能,我怎样才能实现这一目标?

原因:我有一个方法返回与列表/数据库中的表达式匹配的所有T元素,现在我想用仅我指定的值。 像这样:

// - Setting all user's names and age whose have null as Name.
NotSureIfItsAGoodIdea<User>(u => { u.Name = "AllAsOne", u.Age = 20 }, f => f.Name == null);

2 个答案:

答案 0 :(得分:0)

我不确定我是否有你的想法,但如果你想要的是在表达式为真时分配一些值,你可以做这样的事情,传递对象,动作和表达式。

public static void TheFunctionIWishFor<T>(T user, Action<T> assignValuesToUser, Func<T, bool> expression) where T : class
{
    if (expression(user) == true)
    {
        assignValuesToUser(user);
    }
}

答案 1 :(得分:-1)

Lambda在多种情况下的表现可能是这样的:

我只是给你一个例子,说明你的情况可能会如何,我写了类似的内容,让我们看看你的列表,其中Name不为null,年龄不同于0或你想要的任何条件加那里..

u => u.Lists.Include(l => l.Name)
     .Where(l => l.Name!= String.Empty && l.Age>= 0)

多个语句可以用大括号括起来。

请参阅documentation