8,494
社区成员




public class Student
{
int ID {get; set;}
int UID {get; set;}
string Name {set; get;}
}
List<Student> s1 = new List<Student>();
List<Student> s2 = new List<Student>();
join规则 s1.ID == s2.UID && s1.UID == s2.ID
怎么写?
from g in s1
join f in s2 on new { s1.ID, s1.UID } equals new { s2.UID, s2.ID } into h
select g;
这样不对!
var interace = from g in s1
join f in s2 on new { s1.UserID, s1.PartnerUserID } equals new { s2.PartnerUserID, s2.UserID } into h
from c in h.DefaultIfEmpty()
select new
{
g
};
这样写也不对!
应该怎么写???
class Program
{
static void Main(string[] args)
{
var s1 = GetData1();
var s2 = GetData2();
var query = from e1 in s1
join e2 in s2
on new { e1.ID, e1.UID } equals new { e2.ID, e2.UID }
select e1;
foreach (var e in query.ToList())
Console.WriteLine(e.ToString());
Console.Read();
}
static List<Student> GetData1()
{
var data = new List<Student>
{
new Student {ID = 1, UID = 1, Name = "Data1_1"},
new Student {ID = 2, UID = 2, Name = "Data1_2"},
new Student {ID = 3, UID = 3, Name = "Data1_3"},
new Student {ID = 4, UID = 4, Name = "Data1_4"}
};
return data;
}
static List<Student> GetData2()
{
var data = new List<Student>
{
new Student {ID = 2, UID = 2, Name = "Data1_2"},
new Student {ID = 3, UID = 3, Name = "Data1_3"},
new Student {ID = 5, UID = 5, Name = "Data1_5"}
};
return data;
}
}
class Student
{
public int ID { get; set; }
public int UID { get; set; }
public string Name { set; get; }
public override string ToString()
{
return string.Format("[ID:{0}],[UID:{1}],[Name:{2}]", ID, UID, Name);
}
}
var interace = from g in s1
join f in s2 on g.ID equals f.UID into h
from c in h.DefaultIfEmpty()
where c==null || g.UID== c.ID
select new
{
g
};
var interace = from g in s1
join f in s2 on g.ID equals f.UID into h
from c in h.DefaultIfEmpty()
where c!=null && g.UID== c.ID
select new
{
g
};
var query=from g in s1
join f in s2
on new { ID1=g.ID, ID2=g.UID } equals new { ID1=f.UID, ID2=f.ID } into h
select g;
void Main()
{
var s1 = GetData1();
var s2 = GetData2();
var query=from g in s1
join f in s2
on new { ID1=g.ID, ID2=g.UID } equals new { ID1=f.UID, ID2=f.ID } into h
from h1 in h.DefaultIfEmpty()
select h1;
query.ToList().ForEach(q=>Console.WriteLine(q==null?"":q.ToString()));
/*
[ID:2],[UID:1],[Name:Data1_2]
[ID:2],[UID:3],[Name:Data1_3]
*/
}
List<Student> GetData1()
{
var data = new List<Student>
{
new Student {ID = 1, UID = 2, Name = "Data1_1"},
new Student {ID = 2, UID = 2, Name = "Data1_2"},
new Student {ID = 3, UID = 2, Name = "Data1_3"},
new Student {ID = 4, UID = 4, Name = "Data1_4"}
};
return data;
}
List<Student> GetData2()
{
var data = new List<Student>
{
new Student {ID = 2, UID = 1, Name = "Data1_2"},
new Student {ID = 2, UID = 3, Name = "Data1_3"},
new Student {ID = 5, UID = 5, Name = "Data1_5"}
};
return data;
}
class Student
{
public int ID { get; set; }
public int UID { get; set; }
public string Name { set; get; }
public override string ToString()
{
return string.Format("[ID:{0}],[UID:{1}],[Name:{2}]", ID, UID, Name);
}
}
var query=from g in s1
join f in s2
on new { ID1=g.ID, ID2=g.UID } equals new { ID1=f.UID, ID2=f.ID } into h
from h1 in h.DefaultIfEmpty()
select h1;