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

标签 c# linq linq-to-sql anonymous-types

我有一个名为 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/

相关文章:

c# - 将 DataTable 转换为对象 [,] 的最有效方法是什么?

c# - Linq to SQL DataContext 的多个/单个实例

c# - LINQ 到 SQL : On load processing of lazy loaded associations

javascript - Visual Studio 2015 文件打开速度很慢?

c# - 抽象类中 'this'的类型与重载方法解析顺序困惑

c# - 使用 LINQ 访问文件夹

c# - LINQ to SQL : Advanced queries against lists, 数组和对象列表

c# - WPF ListView : Aligning text in selected columns

c# - 通过用于 Symbol 条码扫描仪 DS4208 的 SNAPI.dll API 捕获图像

c# - 通过 Entity Framework 6 中另一个表中的外键获取记录