Linq to sql: объединить дочерние строки в один объект - PullRequest
0 голосов
/ 27 ноября 2011

У меня есть три таблицы примерно так:

Предварительные настройки:

ID int PK,
Name nvarchar

Preset_milestone_presets : (таблица ссылок)

presetId int PK, FK to Preset-table.
milestoneId int PK

Preset_titles_presets : (таблица ссылок)

presetId int PK, FK to Preset-table.
titleId int PK

И объект C #, подобный так:

Пресет:

int[] milestoneIds
int[] titleIds

ИтакМне интересно, как лучше всего использовать linq-to-sql для создания на одной сущности, которая имеет объединенный отдельный список milestoneIds и titleIds, который представляет несколько пресетов.(Объединены с несколькими строками в таблице предустановок)?

РЕДАКТИРОВАТЬ: Примеры данных:

Prestes

1   "Preset 1"
2   "Preset 2"

Preset_milestone_presets

1   1
1   2
1   3
1   4
2   1
2   5
2   6

Preset_titles_presets

1   1
1   2
2   1
2   3
2   4

Ожидаемый результат при запросе пресетов с идентификаторами 1 и 2 - один объект со следующими массивами: milestoneIds: {1,2, 3, 4, 5, 6} titleIds: {1, 2, 3, 4}

1 Ответ

1 голос
/ 28 ноября 2011

Я надеюсь, что этот код поможет вам:

Dictionary<string, List<int>> result = 
   new Dictionary<string, List<int>>();

/*id's */
List<int> ids = new List<int>(new int[] { 1,2 });

/* Tanking Prestes */
var my_presets = 
   (from p in Prestes 
    join i in ids
    on p.id = i
    select p);

/*Taking Milestones*/
my_milestones_ids = 
   (from m in Preset_milestone_presets 
    join p in my_presets
    on m.idPreset = p.id
    select m.id).Distinct().ToList();

/*Taking titles*/
my_titles_ids = 
   (from t in Preset_titles_presets 
    join p in my_presets
    on t.idPreset = p.id
    select t.id).Distinct().ToList();

/* result */
result.Add( "presets_ids", ids);
result.Add( "milestones_ids", my_milestones_ids);
result.Add( "titles_ids", my_titles_ids);

Если вам не нравятся объединения, попробуйте:

/* Tanking Prestes */
var my_presets = 
   (from p in Prestes 
    where ids.Contains( p.id)
    select p);

/*Taking Milestones*/
my_milestones_ids = 
   (from m in Preset_milestone_presets 
    where my_presets.Contains( m.Preset) 
    select m.id).Distinct().ToList();

/*Taking titles*/
my_titles_ids = 
   (from t in Preset_titles_presets 
    where my_presets.Contains( t.Preset) 
    select t.id).Distinct().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...