Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 左外部联接实体框架获取错误无法创建空常量_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 左外部联接实体框架获取错误无法创建空常量

C# 左外部联接实体框架获取错误无法创建空常量,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在尝试执行左外连接。它似乎工作正常,但当我的Friends表为空时,我遇到了一个问题 例如,Users表具有与表Friends(id)列相关的外键(friendId) 有时,虽然我的用户不会与朋友链接,但我会出现以下错误: 无法创建“PandaBrew.Models.FriendModel”类型的空常量值 我该怎么处理呢 回购代码: var authUser = (from u in db.Users join f in db.Friends

我正在尝试执行左外连接。它似乎工作正常,但当我的Friends表为空时,我遇到了一个问题

例如,Users表具有与表Friends(id)列相关的外键(friendId)

有时,虽然我的用户不会与朋友链接,但我会出现以下错误: 无法创建“PandaBrew.Models.FriendModel”类型的空常量值

我该怎么处理呢

回购代码:

var authUser = (from u in db.Users
                        join f in db.Friends on u.FriendId equals f.Id into jointable
                        from j in jointable.DefaultIfEmpty()
                        where u.EmailAddress == user.EmailAddress
                        select new UserModel
                        {
                            Id = u.Id,
                            CreatedOn = u.CreatedOn,
                            EmailAddress = u.EmailAddress,
                            FriendId = u.FriendId,
                            RoleId = u.RoleId,
                            PasswordHash = u.PasswordHash,
                            Friend = u.FriendId != null ? new FriendModel()
                                    {
                                        Alias = j.Alias,
                                        CarrierId = j.Id,
                                        CreatedOn = j.CreatedOn,
                                        FirstName = j.FirstName,
                                        Id = j.Id,
                                        LastName = j.LastName,
                                        Locked = j.Locked,
                                        PhoneNumber = j.PhoneNumber,
                                        SteamId = j.SteamId,
                                    } :  null,
                        }).SingleOrDefault();

当没有friendId时,我尝试将Friend设置为null,但它不起作用。

因此,在深入研究源代码管理和内存后,我回忆起,我最初的评论是我尝试的第一件没有起作用的事情。最后,我决定只拆分查询(删除连接),然后检查是否需要第二个查询来获取相关数据。首先,我将所有内容都选择为匿名类型,然后根据需要填充实际的类,但再次查看,我认为在您的情况下,有一种更简单的方法(见下文)

或者,一种更简洁的方法应该是仅使用ID初始化朋友:

var authUser = (from u in db.Users
                where u.EmailAddress == user.EmailAddress
                select new UserModel
                {
                    Id = u.Id,
                    CreatedOn = u.CreatedOn,
                    EmailAddress = u.EmailAddress,
                    FriendId = u.FriendId,
                    RoleId = u.RoleId,
                    PasswordHash = u.PasswordHash,
                    Friend = new FriendModel()
                            {
                                Id = u.FriendId ?? 0
                            },
                }).SingleOrDefault();

if (authUser.Friend.Id > 0)
{
    // Set authUser.Friend here with a new query
}

我通常通过创建一个空的(在本例中是空的)FriendModel来解决这个问题,而不是null,然后检查它(之后可能会将Friend设置为null)。这不是你的代码的问题,这是EF的问题。嗯,你能告诉我你的意思吗?因为当我把它设为空的时候,我仍然会得到一个错误。以最简单的形式,我的意思是:。。Friend=u.FriendId!=无效的新建FriendModel(){…}:新建FriendModel()。。。然后执行类似“if(authUser.Friend.Id==0)authUser.Friend=null”的操作。我发现了一个新错误:在一个LINQ to Entities查询中,两个结构不兼容的初始化中出现了类型FriendModel。噢,该死,我想我混淆了我使用的两个不同的解决方法(目前没有我的项目或visual studio可用,因此无法再次检查)。但我认为另一种选择是对每个属性执行“u.FriendId!=null”-检查。例如:…Friend=new FriendModel(){Alias=u.FriendId!=null?j.Alias:,…}1.如果到明天上班时你还没有这个问题的答案,我会再查一遍。
var authUser = (from u in db.Users
                where u.EmailAddress == user.EmailAddress
                select new UserModel
                {
                    Id = u.Id,
                    CreatedOn = u.CreatedOn,
                    EmailAddress = u.EmailAddress,
                    FriendId = u.FriendId,
                    RoleId = u.RoleId,
                    PasswordHash = u.PasswordHash,
                    Friend = new FriendModel()
                            {
                                Id = u.FriendId ?? 0
                            },
                }).SingleOrDefault();

if (authUser.Friend.Id > 0)
{
    // Set authUser.Friend here with a new query
}