【发布时间】:2018-01-26 09:50:18
【问题描述】:
这是示例场景,我有 3 个不同的方法,具有不同的参数,但结果是相同的属性类的返回列表。
这是我的代码:
// My Model class:
public class Users{
public string Name{ get; set; }
public int Age { get; set; }
public string Location { get; set; }
}
// My Vm class:
public class UserVm {
public string Name{ get; set; }
public int Age { get; set; }
public string Location { get; set; }
}
这是我的 lambda 查询
// by name
public IEnumerable<UserVm> GetUsersByName (string name){
return db.Users.Where(x=>x.Name == name).Select(users=>new UserVm{
Name = users.Name,
Age = users.Age,
Location = users.Location
}).Tolist();
}
// by location
public IEnumerable<UserVm> GetUsersByAge (int age){
return db.Users.Where(x=>x.Age == age).Select(users=>new UserVm{
Name = users.Name,
Age = users.Age,
Location = users.Location
}).Tolist();
}
// by age
public IEnumerable<UserVm> GetUsersByLocation (string location){
return db.Users.Where(x=>x.Location== location).Select(users=>new UserVm{
Name = users.Name,
Age = users.Age,
Location = users.Location
}).Tolist();
}
如您所见,它们都在视图模型中返回相同的结果。有没有办法像我可以重用那些冗余代码?就像我会放这些代码
return db.Users.Where(x=>x.Location== location).Select(users=>new Users{
Name = users.Name,
Age = users.Age,
Location = users.Location
}).Tolist();
在一个方法中,但它们的 where 子句在每个调用 main 方法的方法中都不同?
【问题讨论】:
-
GetUsersBy(Func<UserVm, bool> where),例如GetUsersBy(u => u.Age == 50) -
您喜欢为您的用户模型类编写一个构造函数,它接受
db.user并从中设置属性? -
@ntohl 我已经更新了。是的,它应该是 UserVm :)
-
我的建议是避免过于笼统。通过使用不同的方法签名,您可以确切地知道自己在做什么,并且可以避免自动化的事情。
标签: c# entity-framework linq lambda