Linq комплекс Inner Join - PullRequest
       20

Linq комплекс Inner Join

0 голосов
/ 10 ноября 2019

Я хочу объединить свои данные с помощью linq inner join как:

[DataContract]
public class Data
{
    [DataMember(Order = 0, IsRequired = false, EmitDefaultValue = false)]
    public List<DataResultObject> Row { get; set; }
}

[DataContract]
public class DataResultObject
{
    [DataMember]
    public string NAME { get; set; }
    [DataMember]
    public string VALUE { get; set; }
    [DataMember]
    public string TYPE { get; set; }

}

List<Data> follow = (List<Data>)dataset_cache.Get("follow");//364 rows
List<Data> icerik = (List<Data>)dataset_cache.Get("icerik");//134854 rows

List<Data> follow_icerik = icerik.Join(follow,
                i => i.Row.Where(w => w.NAME == "CrawlSourceId").Select(s => s.VALUE),
                f => f.Row.Where(w => w.NAME == "crawl_source_id").Select(s => s.VALUE),
                (i, f) =>
                    new Data
                    {
                        Row = i.Row.Concat(nf.Row).ToList()
                    }
                ).Take(5).ToList();

Но он возвращает пустое значение, как использовать внутреннее объединение, когда у нас есть список в предложении "on"?

table 1 data image

table 2 data image

1 Ответ

0 голосов
/ 10 ноября 2019

Попробуйте:

List<Data> follow_icerik = icerik.Concat(
                icerik.SelectMany(e => e.Row)
                                 .Where(w => w.NAME == "CrawlSourceId")
                                 .Join(follow.SelectMany(e => e.Row)
                                              .Where(w => w.NAME == "crawl_source_id"),
                i => i.VALUE,
                f => f.VALUE,
                (i, f) =>
                     new List<DataResultObject> { i, f }
                ).Select(e => new Data { Row = e })
).ToList();

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

icerik.SelectMany(e=>e.Row) - выбрать строки с данными, которые нам нужны

icerik.SelectMany(e=>e.Row).Where(w => w.NAME == "CrawlSourceId") - отфильтровать эти данные

... Join(... - объединить отфильтрованные данные

В Join мы также должны отфильтровать данные перед объединением: follow.SelectMany(e=>e.Row) .Where(w => w.NAME == "crawl_source_id")

i => i.VALUE, f => f.VALUE, - поля, к которым мы присоединяем данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...