2014-02-27 19 views
0

我是LINQ和Lambda表达式的新手,所以我想知道如何使用我的示例。与自己比较的列表

我有类:

public class Map 
{ 
    public string SourceName { get; set; } 
    public string DestinationName { get; set; } 
    public List<Assignment> AssignmentList { get; set; } 

    public Map() 
    { 
     AssignmentList = new List<Assignment>(); 
    } 
} 

public class Assignment 
{ 
    public string Source { get; set; } 
    public string Destination { get; set; } 
    public string SourceName { get; set; } 
    public string DestinationName { get; set; } 
    public string Description { get; set; } 
    public string Mandatory { get; set; } 
    public string Error { get; set; } 

    public void EmptyAssignment() 
    { 
     Source = ""; 
     Destination = ""; 
     SourceName = ""; 
     DestinationName = ""; 
     Description = ""; 
     Mandatory = "False"; 
     Error = "False"; 
    } 
} 

现在,我要检查,如果在一个地图的任何assignment.Destination等于一个assignment.Source在任何其他地图的名单上。所有这些都在同一个列表中。我不知道如何以有效的方式与自己比较。

回答

2

如果比较应区分大小写:

map.AssignmentList.Any(a => a.Source == a.Destination) 
+0

你好,我忘了写一个细节。 assign.Destination位于另一个Map中的Map和assignment.Source中。对不起,忘记了。 – Th3B0Y

1

试试这个:

Map map1 = new Map(); 
Map map2 = new Map(); 

var listExists = from d in map1.AssignmentList 
join i in map2.AssignmentList 
    on d.Source equals i.DestinationName 
select d 

    if(listExists.Count > 0) 
    { 
    //is equals 
    } 
+0

你好,我忘了写一个细节。 assign.Destination位于另一个Map中的Map和assignment.Source中。对不起,忘记了。 – Th3B0Y

+0

我改变了我的答案 –

1

如果比较是不区分大小写的使用:

map.AssignmentList.Any(a => a.Source.Equals(a.Destination, StringComparison.OrdinalIgnoreCase)); 

并区分大小写比较:

map.AssignmentList.Any(a => a.Source.Equals(a.Destination)); 
+0

你好,我忘了写一个细节。 assign.Destination位于另一个Map中的Map和assignment.Source中。对不起,忘记了。 – Th3B0Y