Nano Hash - криптовалюты, майнинг, программирование

LINQ Entity Framework Выберите в отношении не первичный ключ

у меня есть 3 модели класса с перекрывающимися отношениями:

class worder {
  int workerID
}    
class shift {
  int shiftID,
  int workerID,
  ICollection tasks //tasks for this shift and this worker
}
class task {
  int workerID
  int shiftID
}    

как мне заполнить коллекцию объектов сдвига, которые включают соответствующие .tasks? что-то типа:

var q = from shift in db.shifts
  .Include(s => s.tasks.Where(t=>t.shiftID == s.shiftID && t.workerID = s.workerID))

РЕДАКТИРОВАТЬ

Я успешно использовал проекцию для создания анонимного типа, как это было предложено Jethro. но вместо этого я хотел бы вернуть строго типизированные классы сдвига. это возможно? или плохой дизайн сменной модели?


  • Вы использовали подход Code First или дизайн из базы данных с EF? Являются ли ваши классы основанными на таблицах в вашей базе данных, и есть ли у них отношения? 03.07.2011
  • какая связь между shift и task в вашей модели? В идеале вам не нужно ничего делать и просто использовать свойство tasks, если смоделировано правильно. 03.07.2011

Ответы:


1

Вы можете присоединиться к столам.

var joinedTables = from c in db.shifts
                   join p in db.tasks on c.ShiftID equals p.ShiftID & c.WorkerID equals p.WorkerID
select new {Shifts = c, Tasks = p };

Перейдите по этой ссылке, чтобы найти дополнительные примеры соединений Linq.

var shifts = db.shifts;
var tasks = db.tasks;

foreach(var shift in shifts)
{
    var shiftID = shift.ShiftID;
    var workerID = shift.WorkerID;
    shift.tasks = tasks.Where(p=>p.shiftID == shiftID & p.WorkerID == workerID);
}

Что-то в вышесказанном кажется мне «неправильным», я думаю, было бы лучше, если бы вы снова посмотрели на свой дизайн, задачи смен должны заполняться автоматически, когда вы тянете смены.

03.07.2011
  • 1. Я использую Code First. прямой связи между сменой и задачами нет. коллекция shift.tasks должна содержать подмножество задач, относящихся к смене как по shiftID, так и по workerID 03.07.2011
  • Я понимаю ваше предложение и сделал это. есть ли способ вместо этого вернуть строго типизированные объекты сдвига? 03.07.2011
  • Если вы просто выбираете из db.shifts, он не возвращает список задач? 03.07.2011
  • я не уверен, что полностью понимаю ваш вопрос, но shifts.tasks возвращает пустое значение, потому что структура сущностей не может обнаружить связь из определения класса. и я не знаю, как явно запросить его с помощью linq. я думал, что мой запрос linq выше будет работать, но это не так. 03.07.2011
  • ваш второй пример, назначение свойства shift.tasks непосредственно в цикле foreach, похоже, что он может работать для меня. поэтому я полагаю, что ответ заключается в том, что я не могу достичь цели, используя один оператор linq. мне нужно создать подзапросы linq, а затем выполнить их в foreach. дайте мне знать, если вы согласны. Благодарность 04.07.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..