Entity Framework: метод соединения - PullRequest
0 голосов
/ 07 июля 2010

Я уже провожу достаточно времени, поэтому мне нужна помощь от stackoverflow.

Вот сущность

Entity: Asset 
Field: AssetVersionID (int) PK
Field: AssetID (int) FK
Field: ReleaseTimestamp (DateTime)

Моя задача - выбрать активы с уникальным AssetID и последней версией ReleaseTimestamp. в основном мне нужна такая функция

public IQueryable<Asset> GetAssets(List<int> assetIds)

в SQL это выглядит так:

select a1.* 
from Assets as a1
join (
        select t.AssetID, max(t.ReleaseTimestamp) as ReleaseTimestamp
        from Asssets as t
        where AssetID in (1,2,3,4,5)
        goup by AssetID
    ) as a2
on a1.AssetID = a2.AssetID and a1.ReleaseTimestamp= a2.ReleaseTimestamp

как это сделать с EF и LINQ?

Я пробовал это:

public IQueryable<Asset> GetAssets(List<int> assetUIds)
{
 IQueryable<Asset> assets = _context.Assets.Where(a => assetUIds.Contains(a.UID));
 var ff = assets.GroupBy(a => a.UID, a => a,
              (uid, p2) => new {KEY = uid, rel = p2.Max(p2a => p2a.ReleaseTimestamp)});
 IQueryable<Asset> assets2 = _context.Assets;

 var assets3 = from ass1 in assets2
          join ass2 in ff on new {ass1.UID, ass1.ReleaseTimestamp} equals new {ass2.KEY, ass2.rel}
          select ass1;
 return assets3;
}

но у меня есть синтаксическая ошибка рядом с "join" в основном это работает:

join ass2 in ff on ass1.UID equals ass2.KEY

а это не

join ass2 in ff on new {ass1.UID, ass1.ReleaseTimestamp} equals new {ass2.KEY, ass2.rel}

как всегда:)

Пожалуйста, помогите!

1 Ответ

1 голос
/ 08 июля 2010

Выражения, к которым вы присоединяетесь, должны быть идентичны.Измените его на:

join ass2 in ff on new {KEY = ass1.UID, rel = ass1.ReleaseTimestamp} equals new {ass2.KEY, ass2.rel}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...