我正在制作一个方法来定义(在内存中创建以供以后使用)一个具有一些特定变量的对象,以及另一个我将用于比较的对象。
例如:
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);
答案 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)
多个语句可以用大括号括起来。