我有一个名为 UserInfo 的类,其中包含有关给定用户的详细信息。
代码中的多个位置可能会查询数据,我希望有一个函数来使用 Linq 查询中的相应数据填充 UserInfo 对象。
var userData = dc.Users.Where(λ => (λ.Login == username) && λ.Active)
.Select(λ => new { λ.ID, Salt = λ.Seasonings.Single().Salt, λ.Login, λ.PassHash, λ.Admin, λ.Trusted, λ.E_mail, λ.Name, λ.Phone, λ.Note, λ.RegistrationDate }).SingleOrDefault();
string tmppass = generatePassHash(password, userData.Salt);
if (userData.PassHash.Trim() == tmppass.Trim())
{
ID = userData.ID;
// Here is the stuff i'd like to move to a function
_user._id = userData.ID;
_user._userState = State.NotAuthorized;
_user._username = userData.Login;
_user._name = userData.Name;
_user._email = userData.E_mail;
_user._phone = userData.Phone;
_user._notes = userData.Note;
...
}
如何正确设置函数来接受此匿名类型作为参数?我需要声明一个新接口(interface)还是有更简单的方法?
感谢您的帮助!
PS-抱歉过多的下划线,嵌套类让事情变得有点困惑。
最佳答案
为了简单起见,难道您不能让所有例程接受实体对象本身吗?例如。如果dc.Users
是UserEntity
类型的表,则跳过Select()
:
UserEntity userData = dc.Users.Where(
λ => (λ.Login == username) && λ.Active).SingleOrDefault();
如果这是 Not Acceptable ,请封装一个更有限的对象,该对象将 UserEntity 作为构造函数参数:
public class UserInfo
{
public string Name {get;set;}
public string Phone {get;set;}
...
public UserInfo(UserEntity entity)
{
this.Name = entity.Name;
this.Phone = entity.Phone;
...
}
}
var userData = dc.Users.Where(
λ => (λ.Login == username) && λ.Active).Select(
λ => new UserInfo(λ)).SingleOrDefault();
这将困惑的转换从应用程序的其余部分中抽象出来。不过,一般来说,我建议简单地使用实体对象,因为它可以在您需要时更轻松地进行反向操作(将修改后的实体传递回 DAL)。
关于c# - 将 LINQ 结果传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416819/