C# C LINQ根据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>(); } 有什么帮助吗

我有一个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>();
}
有什么帮助吗

编辑: 此查询以前应用于合并重复的登录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;