[英]Linq complex Inner Join
I want to join my data with linq inner join as:我想将我的数据与 linq 内部连接连接为:
[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();
But it returns empty, how to use inner join when we have list in "on" clause?但是它返回空,当我们在“on”子句中有列表时如何使用内连接?
Try this:尝试这个:
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();
EDIT:编辑:
icerik.SelectMany(e=>e.Row)
- select rows with data which we are needed icerik.SelectMany(e=>e.Row)
- select 行,其中包含我们需要的数据
icerik.SelectMany(e=>e.Row).Where(w => w.NAME == "CrawlSourceId")
- filter this data icerik.SelectMany(e=>e.Row).Where(w => w.NAME == "CrawlSourceId")
- 过滤这些数据
... Join(...
- join filtered data ... Join(...
- 加入过滤后的数据
In Join
we also have to filter data before join: follow.SelectMany(e=>e.Row).Where(w => w.NAME == "crawl_source_id")
在Join
中,我们还必须在 join 之前过滤数据: follow.SelectMany(e=>e.Row).Where(w => w.NAME == "crawl_source_id")
i => i.VALUE, f => f.VALUE,
- fields on which we join data. i => i.VALUE, f => f.VALUE,
- 我们加入数据的字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.