C# 从linq查询结果填充列表

C# 从linq查询结果填充列表,c#,linq,list,dapper,C#,Linq,List,Dapper,我有下面的代码,我将返回与userId相关联的结果,然后我希望遍历结果并构建一个集合并将其返回到UI public List<UserEmails> LoadUsersInbox(Int64 userId, int status) { List<UserEmails> userEmails = null; using (var sqlCon = new SqlConnection(Context.ReturnDatabaseCo

我有下面的代码,我将返回与userId相关联的结果,然后我希望遍历结果并构建一个集合并将其返回到UI

 public List<UserEmails> LoadUsersInbox(Int64 userId, int status)
    {
        List<UserEmails> userEmails = null;

        using (var sqlCon = new SqlConnection(Context.ReturnDatabaseConnection()))
        {
            var emails = sqlCon.Query<UserEmailEntity>(@"SELECT e.EmailId, e.ItemId, u.Username as FromUserName, e.EmailReceived
                                                   FROM User_Emails e
                                                   INNER JOIN User_Profile u on e.FromUserId = u.UserId
                                                   WHERE ToUserId = @userId and EmailStatus = @Status",
                                                   new { ToUserId = userId, Status = status }).OrderBy(d => d.EmailReceived);

            foreach (var item in emails)
            {
                // loop through and build and List of UserEmails
            }
        }

        return userEmails;
    }
public List LoadUsersInbox(Int64用户ID,int状态)
{
List userEmails=null;
使用(var sqlCon=new SqlConnection(Context.ReturnDatabaseConnection()))
{
var emails=sqlCon.Query(@“选择e.EmailId,e.ItemId,u.Username作为FromUserName,e.EmailReceived
来自用户的电子邮件
e.FromUserId=u.UserId上的内部联接用户\u配置文件u
其中ToUserId=@userId和EmailStatus=@Status“,
新的{ToUserId=userId,Status=Status});
foreach(电子邮件中的var项目)
{
//循环浏览并生成和列出用户电子邮件
}
}
返回用户电子邮件;
}

但是我想不出它的语法,有人能帮我吗。

您可以转换列表,而无需进入foreach循环。您可以使用Select语句执行此操作。我无法验证这一点(因此未经测试的代码),但如果您这样做,它应该可以工作:

public List<Int64> LoadUsersInbox(Int64 userId, int status)
{
    using (var sqlCon = new SqlConnection(Context.ReturnDatabaseConnection()))
    {
       return sqlCon.Query<UserEmailEntity>
            (@"SELECT e.EmailId, e.ItemId, u.Username as FromUserName, e.EmailReceived
               FROM User_Emails e
               INNER JOIN User_Profile u on e.FromUserId = u.UserId
               WHERE ToUserId = @userId and EmailStatus = @Status",
               new { ToUserId = userId, Status = status })
            .OrderBy(d => d.EmailReceived)
            .Select(usrEmlEnt => usrEmlEnt.EmailId);
    }
    return new List<Int64>();
}
public List LoadUsersInbox(Int64用户ID,int状态)
{
使用(var sqlCon=new SqlConnection(Context.ReturnDatabaseConnection()))
{
返回sqlCon.Query
(@“选择e.EmailId、e.ItemId、u.Username作为FromUserName、e.EmailReceived
来自用户的电子邮件
e.FromUserId=u.UserId上的内部联接用户\u配置文件u
其中ToUserId=@userId和EmailStatus=@Status“,
新的{ToUserId=userId,Status=Status})
.OrderBy(d=>d.EmailReceived)
.Select(usrEmlEnt=>usrEmlEnt.EmailId);
}
返回新列表();
}

您不懂什么语法?您所尝试的是编译错误还是运行时错误?如果查询正确返回您想要的内容,您只需执行OrderBy(d=>d.EmailReceived).ToList()然后返回电子邮件即可。您不需要foreach循环。那么这个查询是不是没有编译,或者它给了您一个空列表,或者它给了您不正确的值?正如starlight54所说(或多或少),您现在展示的是一个集合。这就是为什么我们都要求对您还没有的需求进行更多的澄清。我的方法返回列表我目前正在查询UserEmailEntity,所以当我说返回电子邮件时,它说无法将表达式类型UserEmailEntity转换为UserEmail,这就是为什么我问如何根据电子邮件中的结果构建列表@philologon@phiologon感谢您提供的代码片段,我在.Select(usrEmlEnt=>usrEmlEnt.UserEmails)上收到一个错误;这是WebServices.DatabaseEntity.UserEmailEntity不包含“UserEmails”的定义,并且在SQL select语句的四项中找不到接受第一个参数类型为“WebServices.DatabaseEntity.UserEmailEntity”的扩展方法“UserEmails”(用户电子邮件实体)好的,哪一个映射到用户电子邮件?也就是说,它是与UserEmails相同的类型,还是需要进行转换(比如在构造函数中)?好的,UserEmailEntity是一个在SQL中创建表的类(使用实体框架)UserEmails是Entity类的简化版本,纯粹是因为我现在不需要UserEmailEntity中的所有属性。关于映射,我使用EmailId和UserID注意,在您最初的帖子中,您没有在foreach循环中放入任何语句。所以我对Select语句中的内容的建议仍然有效,但您实际上是在问foreach循环中的内容,对吗?好的,现在我们需要更多关于UserEmailEntity和UserEmail类型的信息。定义是什么(仅属性)?我们只需要pertinate属性?那是emailID吗?那是很长的一段时间吗?如果是这样,那么您可能只需要返回一个IEnumerable或。这是正确的。是的,因为我正在填充select查询中的“电子邮件”,所以我希望遍历它并构建列表,然后返回它。EmailId是一个很长的正确答案。