//定义用于此范例演示的类
public class ProjectListModel
{
public string Id { get; set; }
public string ProjectTypeId { get; set; }
public string YSState { get; set; }
public string OpenEndData { get; set; }
}
public class state
{
public string Id { get; set; }
public string ProjectTypeId { get; set; }
}
public class State1
{
public string Id { get; set; }
public string YSState { get; set; }
}
public class State2
{
public string Id { get; set; }
public string OpenEndData { get; set; }
}
//下面是方法体内加以实现
//创建对象
List<state> test1 = new List<state>()
{
new state()
{
Id = "1",
ProjectTypeId = "a"
},
new state()
{
Id = "2",
ProjectTypeId = "b"
},
new state()
{
Id = "3",
ProjectTypeId = "c"
},
new state()
{
Id = "4",
ProjectTypeId = "d"
},
new state()
{
Id = "6",
ProjectTypeId = "f"
}
};
List<State1> test2 = new List<State1>()
{
new State1()
{
Id = "1",
YSState = "Y"
},
new State1()
{
Id = "2",
YSState = "N"
},
new State1()
{
Id = "3",
YSState = "N"
},
new State1()
{
Id = "4",
YSState = "Y"
},
new State1()
{
Id = "5",
YSState = "Y"
}
};
List<State2> test3 = new List<State2>()
{
new State2()
{
Id = "6",
OpenEndData = "F6"
}
};
//【关注点】
var res2 = from f in test1
//连接test3,加 DefaultIfEmpty() 实际就是为了保证如果test3与test1不匹配的时候,保证test1存在
join j in test3
on f.Id equals j.Id into JoinedEmpDept
from j in JoinedEmpDept.DefaultIfEmpty()
//连接test2
join k in test2
on f.Id equals k.Id into t3JoinedEmpDept
from k in t3JoinedEmpDept.DefaultIfEmpty()
orderby f.Id descending
select new ProjectListModel
{
Id = f.Id,
ProjectTypeId = f.ProjectTypeId,
YSState = k != null ? k.YSState : " ",
OpenEndData = j != null ? j.OpenEndData : ""
};
//输出看看
foreach (var item in res2)
{
Console.WriteLine("Id: " + item.Id + " - " + "ProjectTypeId: " + item.ProjectTypeId + " - " + "YSState: " + item.YSState + " - " + "OpenEndData: " + item.OpenEndData);
}
//结果展示
============================================================
//如果只去掉 test3 的 DefaultIfEmpty()处理,看看结果
//如果只去掉 test2 的 DefaultIfEmpty()处理,看看结果
//如果去掉test2、test3的DefaultIfEmpty()处理
什么结果都没了(无事发生~)