当我尝试getallUsers()时,Sequence不包含匹配元素错误

时间:2018-02-16 08:18:56

标签: c# .net entity-framework model-view-controller dapper

您好我的问题是我有2个表一个是User表,另一个是CustomerUsers我通过Deleted = 0选择它们当我尝试列出所有用户并且有customerId时,我遇到的问题是序列中没有匹配的元素错误<登记/> 我的代码低于任何帮助将是适当的

谢谢

我的Dapper查询如下:

 public List<User> GetAllUsers()
        {
            List<User> user = new List<User>();

            try
            {
                //var sql = @"SELECT * FROM [User] WHERE Deleted=0";

                var sql = @"SELECT * from [User] u LEFT JOIN  [CustomerUser] cu ON u.UserId = cu.CustomerUserId  WHERE u.Deleted=0";

                var lookUp = new List<User>();

                using (var cn = Settings.Helper.ConnectionStringBiz())
                {
                    cn.Open();

                    cn.Query<User,Customer,User>(sql,(u,c)=>
                    {
                        var myUser = lookUp.First(m => m.UserId == u.UserId);

                        if (myUser == null)
                        {
                            lookUp.Add(u);

                            myUser = u;
                        }

                        myUser.Customer = c;

                        return null;

                    },splitOn:"CustomerId");
                }

                return lookUp;
            }

            catch (Exception ex) 
            {
                return user;
            }
        }

1 个答案:

答案 0 :(得分:3)

如果您的lookUp.First(m => m.UserId == u.UserId)没有返回任何结果,通常会发生问题。

如果没有找到匹配条件的任何结果,您可以使用FirstOrDefault类似下面的内容而不是First返回null(默认值)。

var myUser = lookUp.FirstOrDefault(m => m.UserId == u.UserId);

不确定为什么要检查lookUp,它是您在连接到DB之前创建的新列表。它总是空的(如果我不理解它错了)。