У меня есть запрос LINQ:
var result = from mt in MessageTypes
join mtfmt in MessageTypeField_MessageTypes
on new { MessageTypeID = mt.ID, MessageTypeFieldID = messageTypeFieldId } equals new { MessageTypeID = mtfmt.MessageTypeID, MessageTypeFieldID = mtfmt.MessageTypeFieldID }
where (mt.StatusID == (int)status)
select mt;
Или, если хотите, лямбда-синтаксис (тот, который я использую) (messageTypeFieldID
устанавливается над вызовом var из параметра.):
var messageTypes = context.MessageTypes
.Join(
context.MessageTypeField_MessageTypes,
mt =>
new
{
MessageTypeID = mt.ID,
MessageTypeFieldID = messageTypeFieldID
},
mtfmt =>
new
{
MessageTypeID = mtfmt.MessageTypeID,
MessageTypeFieldID = mtfmt.MessageTypeFieldID
},
(mt, mtfmt) =>
new
{
mt = mt,
mtfmt = mtfmt
}
)
.Where(x => (x.mt.StatusID == (int)status))
.Select(x => x.mt);
Я только начал изучать объединения LINQ и подошел к ситуации, когда это требуется в новой настраиваемой таблице (многие-многие), которую я настраиваю, и хочу вернуть все типы сообщений , каждое с их связанное поле , которое находится под 'MessageTypeField_MessageType'.
Моя таблица «MessageTypeField_MessageTypes» представляет собой довольно простую настройку стратегии нормализации, подобную этой, и я должен заявить, что даже несмотря на то, что MessageTypeID «имеет много», это уникальные данные, поэтому они могут быть:
[ID | MessageTypeID | MessageTypeFieldID]
1 63 10
1 63 11
1 63 12
Теперь приведенный выше код выполняет и возвращает запрос, которым я доволен .. (выполняет правильное INNER JOIN), но когда я смотрю на messageTypes.ToList()[0].MessageTypeField_MessageTypes
, например, с помощью быстрого просмотра, где я ожидаю увидеть 1 запись , я получаю весь стек записей messageTypeField_MessageType ~ 17, только , отфильтрованных по MessageTypeFieldID
, а не по MessageTypeID
. Он должен фильтровать по идентификатору типа сообщения на каждой итерации и возвращать только одну запись. Любые идеи о том, что я делаю неправильно, или как я могу добиться того, что мне нужно?
Извините за сложный пример, но я надеюсь, что вы, ребята, можете помочь!