2015-05-20 2 views
1

У меня есть 2 таблицы: Певица и песня как этотДобавить поддельный столбец Linq Entity Framework запрос

enter image description here

мне нужно извлечь песни с 1 певца или просто получить песню ею ид, я использую это:

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 

но я хотите скрыть SingerID, вместо этого я хочу вернуть столбец «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" 

Так как я могу получить результат, как это - все свойства равны (скрыть SingerID и заменить SingerName):

$id: "2", 
Id: 1, 
NAME: "....", 
IMAGE: ".....jpg", 
URL: ".....mp3", 
SingerName: "SingerName etc" 

ответ

1
db.Songs.Where(x => x.SingerID == id).Select(song => new { song.Name, song.Image, etc... , SingerName = song.Singer.NAME }); 
+1

да, но если когда мне нужно изменить таблицу Song (то есть добавить новый столбец «Linkshare» для песни), я должен обновить все мои запросы с новыми свойствами? – user3448806

+0

Да, потому что в этом случае вы создаете новый анонимный объект. Кроме того, это может быть хорошей привычкой вступать (указать возвращаемые столбцы), чтобы свести к минимуму количество возвращаемых данных. Например, что, если кто-то еще добавит в таблицу несколько столбцов, которые вы НЕ в этом случае хотите вернуть в свой запрос. – ozz

2

вы можете просто создать новый анонимный объект и передать все, что вы хотите.

db.Songs.Where(x => x.SingerID == id).Select(song => new { Id, NAME, IMAGE, URL, SingerName = song.Singer.NAME });

Смежные вопросы