C# C LINQ根据List属性将行分隔为两行
我有一个IPInfo对象列表,已经以某种方式进行了筛选。我的问题是根据last List属性分隔记录:C# C LINQ根据List属性将行分隔为两行,c#,linq,C#,Linq,我有一个IPInfo对象列表,已经以某种方式进行了筛选。我的问题是根据last List属性分隔记录: class IPInfo { public String TRADE_DATE; public String CUSTOMER_NAME; public List<String> ORIGINAL_IP; public List<String> LOGON_IP = new 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>();
}
有什么帮助吗
编辑:
此查询以前应用于合并重复的登录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;
}
循环浏览logonIP列表,并将其视为每个logonIP的新行。原始\u IP中的条目数是否始终与登录\u IP中的条目数相同?是否要将第一个原始\u IP与第一个登录\u IP、第二个登录\u IP等匹配?原始\u IP应包含给定客户的所有可能的原始IP。登录\u IP应该只包含一个IP,客户实际用于注销您的第二个示例行并没有显示该IP。真的不清楚你在问什么。第二行是问题:客户记录了两次,两个事件我都需要两行。您的意思是:IPInfo中的foreach ip{foreach logip in ip.LOGON_ip{newlist.Addnew IPInfo{blahproperty=ip.blahproperty,blahlogon=logip}?如果是这样,只需使用几个循环就可以了,不要再尝试使所有内容都LINQ了-现在不知道如何LINQ的问题是,您不会足够理解它,以后再回来进行更改。LINQ可能是一个真正有用的锤子,但不是C中的每个问题都是一个错误-CS0029无法隐式地将类型“string”转换为“Syste”m、 Collections.Generic.List',登录时\u IP=logonIpline@user2376997如果没有其他用途,请将类IPInfo->LOGON\u IP从列表更改为字符串类型,但查询无论如何都不会工作,因为它被视为一个列表var logonIps=y.SelectManyx=>x.LOGON\u IP.Distinct.ToList;很抱歉,我在查询时没有意识到它是一个列表类型在输入答案时,我编辑了我的答案,我首先检索列表中的字符串,然后在列表中循环,实际上,您的第一个答案是正确的,我只是尝试了LOGON_IP={logip};
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;
}
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;