gpt4 book ai didi

c# - 将 LINQ 结果传递给函数

转载 作者:行者123 更新时间:2023-11-30 21:24:00 26 4
gpt4 key购买 nike

我有一个名为 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.UsersUserEntity 类型的表,则跳过 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com