我有IPInfo
个对象的列表,这些对象已通过某种方式过滤。我的问题是根据最后一个List<String>
属性来分隔记录:
class IPInfo
{
public String TRADE_DATE;
public String CUSTOMER_NAME;
public List<String> ORIGINAL_IP;
public List<String> LOGON_IP = new List<String>();
}
List<IPInfo> fields
导出到.xls
文件时如下所示:
我需要将每个Logon IP
记录放在单独的行中,但需要Original IP
保持合并。在一张图片上,我需要CITI
:
----------------------------------------------
10.55.13.104 | 128.110.34.102
128.110.34.102 |
----------------------------------------------
10.55.13.104 | 10.55.13.104
128.110.34.102 |
有帮助吗?
编辑:
该查询是在合并重复的Logon IP
之前应用的。但是,正如我所说的,我需要Logon IP
分开
private static List<IPInfo> selectFields(ref List<IPInfo> fields)
{
var distinct =
fields
.GroupBy(x => new { x.TRADE_DATE, x.CUSTOMER_NAME })
.Select(y => new IPInfo()
{
TRADE_DATE = y.Key.TRADE_DATE,
CUSTOMER_NAME = y.Key.CUSTOMER_NAME,
ORIGINAL_IP = y.SelectMany(x => x.ORIGINAL_IP).Distinct().ToList(),
LOGON_IP = y.SelectMany(x => x.LOGON_IP).Distinct().ToList()
})
.ToList();
return distinct;
}
答案 0 :(得分:1)
var distinct = fields
.GroupBy(x => new { x.TRADE_DATE, x.CUSTOMER_NAME })
.Select(y => {
var logonIps = y.SelectMany(x => x.LOGON_IP).Distinct().ToList();
foreach (var logonIp in logonIps)
{
return new IPInfo(){
TRADE_DATE = y.Key.TRADE_DATE,
CUSTOMER_NAME = y.Key.CUSTOMER_NAME,
ORIGINAL_IP = y.SelectMany(x => x.ORIGINAL_IP).Distinct().ToList(),
LOGON_IP = logonIp
};
}
})
.ToList();
return distinct;
浏览登录IP列表,并将其作为每个登录IP的新行。