gpt4 book ai didi

sql - Entity Framework : How to select specific fields from a singular Navigation Property?

转载 作者:行者123 更新时间:2023-12-01 03:52:43 25 4
gpt4 key购买 nike

我有以下实体:

public class Movie
{
public int MovieID { get; set; }
public int? DirectorID { get; set; }
public string Title { get; set; }

public Person Director { get; set; }
public ICollection<Person> Actors { get; set; }
}

//Director Config:
//HasOptional(m => m.Director).WithMany().HasForeignKey(m => m.DirectorID);


public class Person
{
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
//Other fields....
}

Person 实体具有除我展示的 3 个字段之外的其他字段,但这些是我感兴趣的 3 个字段。 为了创建网页以编辑电影实体,我希望返回如下数据:
var q = _ctx.Movies.Where(m => m.MovieID == movieID);
q = q.Include(m => m.Director);
return q.Select(m => new
{
MovieID = m.MovieID,
Name = m.Title,
Director = m.Director == null ? null : new { id= m.Director.PersonID, text=m.Director.LastName}
}).Single();

目标是返回一个具有 Director 属性的对象,如果没有设置 Director,则该对象为 null,或者如果设置了 Director,则返回一个只有 id 和 text(名称)属性的对象。在这种情况下,将整个个人实体返回给客户是多余的。不幸的是,上面的查询不起作用。

有没有做这样的事情的选择?备择方案?

非常感谢您的帮助。

最佳答案

它失败,因为如果没有导演, Entity Framework 无法将匿名类型设置为 null。

一个很好的解决方法是向类型添加一个标志以指示电影是否有导演,如果不是这样,只需将其他属性设置为一些虚拟值。

然后,您可以在访问任何实际值之前检查标志。

using (var ctx = new Context())
{
var movie =
(from m in ctx.Movies.Include(p => p.Director)
where m.MovieID == 3
let hasDirector = m.Director != null
select new
{
MovieID = m.MovieID,
Name = m.Title,
Director = new
{
Id = hasDirector ? m.Director.PersonID : -1,
Text = hasDirector ? m.Director.LastName : null,
Exists = hasDirector
}
}).SingleOrDefault();

if (movie != null)
{
Console.WriteLine("Movie name: " + movie.Name);

if (movie.Director.Exists)
{
Console.WriteLine("Director id: " + movie.Director.Id.ToString());
Console.WriteLine("Director text: " + movie.Director.Text);
}
else
{
Console.WriteLine("Movie has no director..");
}
}
}

关于sql - Entity Framework : How to select specific fields from a singular Navigation Property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20747742/

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