C# 向Linq实体框架查询添加伪列

C# 向Linq实体框架查询添加伪列,c#,entity-framework,C#,Entity Framework,我有两张桌子:歌手和这样的歌曲 我需要从1个歌手检索歌曲,或者仅通过it id检索歌曲,我使用以下方法: db.Songs.Find(id); // get song by its ID db.Songs.Where(x => x.SingerID == id); // get all songs by singer's ID 然后它返回那首歌 $id: "2", Id: 1, NAME: "....", IMAGE: ".....jpg",

我有两张桌子:歌手和这样的歌曲

我需要从1个歌手检索歌曲,或者仅通过it id检索歌曲,我使用以下方法:

db.Songs.Find(id);                      // get song by its ID
db.Songs.Where(x => x.SingerID == id);  // get all songs by singer's ID
然后它返回那首歌

$id: "2",
Id: 1,
NAME: "....",
IMAGE: ".....jpg",
URL: ".....mp3",
SingerID: 1
但是我想隐藏SingerName,而是想返回一个“SingerName”列。我用过这个:

db.Songs.Where(x => x.SingerID == id).Select(song => new { song, song.Singer.NAME });
但结果是:

song: {
    $id: "2",
    Id: 1,
    NAME: "....",
    IMAGE: ".....jpg",
    URL: ".....mp3",
    SingerID: 1
}
NAME: "SingerName"
那么我如何才能得到这样的结果-所有属性都相等(隐藏SingerName并替换为SingerName):


您只需创建新的匿名对象并传递您想要的任何内容

db.Songs.Where(x=>x.SingerID==id)。选择(song=>new){
身份证件
名称
形象,,
网址,
SingerName=song.Singer.NAME
});

是的,但是如果我需要更改我的歌曲表(即为歌曲添加新的“链接共享”列),我必须用新属性更新所有查询?是的,因为在这种情况下,您正在创建一个新的匿名对象。另外,这可能是一个好习惯(指定返回的列),以最大限度地减少返回的数据量。例如,如果其他人向表中添加了一组其他列,而您在本例中不希望在查询中返回这些列,该怎么办。
$id: "2",
Id: 1,
NAME: "....",
IMAGE: ".....jpg",
URL: ".....mp3",
SingerName: "SingerName etc"
db.Songs.Where(x => x.SingerID == id).Select(song => new { song.Name, song.Image, etc... , SingerName = song.Singer.NAME });