下面是工作,請嘗試。
class Program
{
static void Main(string[] args)
{
List<Request> lstRequest = new List<Request>();
lstRequest.Add(new Request(1, 1));
lstRequest.Add(new Request(2, 2));
List<DemoView> lstDemoView = new List<DemoView>();
lstDemoView.Add(new DemoView(1, "Ram", "Finance"));
lstDemoView.Add(new DemoView(1, "Sam", "Manager"));
lstDemoView.Add(new DemoView(1, "Dan", "Admin"));
lstDemoView.Add(new DemoView(2, "abc", "Finance"));
var query = (from request in lstRequest
select new
{
RequestID = request.RequestID,
SurrogateID = request.SurrogateID,
Finance = lstDemoView.Any(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "finance") ? lstDemoView.SingleOrDefault(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "finance").ApproverName : "",
Manager = lstDemoView.Any(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "manager") ? lstDemoView.SingleOrDefault(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "manager").ApproverName : "",
Admin = lstDemoView.Any(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "admin") ? lstDemoView.SingleOrDefault(x => x.SurrogateID == request.SurrogateID && x.ApproverType.ToLower() == "admin").ApproverName : ""
}).ToList();
}
}
public class Request
{
public int RequestID { get; set; }
public int SurrogateID { get; set; }
public Request(int RequestID, int SurrogateID)
{
this.RequestID = RequestID;
this.SurrogateID = SurrogateID;
}
}
public class DemoView
{
public int SurrogateID { get; set; }
public string ApproverName { get; set; }
public string ApproverType { get; set; }
public DemoView(int SurrogateID, string ApproverName, string ApproverType)
{
this.SurrogateID = SurrogateID;
this.ApproverName = ApproverName;
this.ApproverType = ApproverType;
}
}
注意: - 不要在查詢中多次使用DB.DemoView。只需一次收集列表對象並在查詢中使用該列表。因此保存多個數據庫調用。
您不需要使用左連接只使用連接,默認情況下,linq會將此視爲內連接,您只能通過內連接實現此功能。看到這個http://stackoverflow.com/questions/3217669/how-to-do-a-join-in-linq-to-sql-with-method-syntax – Bharat
試過了。但它不會返回所有行。我認爲我的問題需要子查詢+連接。 –
這被稱爲* pivoting *,並且有很多關於它的問題。也許你可以找到適合你的人。 –