簡體   English   中英

使用LINQ為每個屬性連接2個對象

[英]Use LINQ to join 2 objects for each of its properties

我創建了2個模型來存儲sql查詢的結果。 現在,我想在一周中的每一周都加入它們(week1 = Record_id, week2 = Record_id)以獲取一個新的Object,其中我將擁有來自第一個模型的所有數據以及來自“類別”模型。

我為此創建了一個新模型,但不確定如何編寫linq查詢

第一個模型:

public class CustomData
{
    public string full_name { get; set; }
    public string location { get; set; }
    public int week1 { get; set; }
    public int week2 { get; set; }
    public int week3 { get; set; }
}

第二種模式:

public class Category
{
    public int Record_ID { get; set; }
    public int Color{ get; set; }
    public string Name { get; set; }
}

最終結果的新模型:

public class WeekView
{
    public string full_name { get; set; }
    public string location { get; set; }
    public Category week1 { get; set; }
    public Category week2 { get; set; }
    public Category week3 { get; set; }
}

這應該工作:

        List<CustomData> list = new List<CustomData>();
        list.Add(new CustomData() { full_name = "test", location = "test", week1 = 0, week2 = 1, week3 = 2 });
        list.Add(new CustomData() { full_name = "test2", location = "test2", week1 = 0, week2 = 12, week3 = 22 });
        List<Category> categories = new List<Category>();
        categories.Add(new Category { Color = 0, Name = "testName", Record_ID = 0 });
        categories.Add(new Category { Color = 1, Name = "testName1", Record_ID = 1 });
        categories.Add(new Category { Color = 2, Name = "testName2", Record_ID = 2 });
        categories.Add(new Category { Color = 3, Name = "testName3", Record_ID = 12 });
        categories.Add(new Category { Color = 4, Name = "testName4", Record_ID = 22 });
        List<WeekView> results = new List<WeekView>();
        results.AddRange(list.Select(x=> 
              new WeekView() { full_name = x.full_name, 
                               location = x.location, 
                               week1 = categories.FirstOrDefault(c => c.Record_ID == x.week1), 
                               week2 = categories.FirstOrDefault(c => c.Record_ID == x.week2), 
                               week3 = categories.FirstOrDefault(c => c.Record_ID == x.week3)
                              }));

嘗試以下方法:

var result = (from cd in CustomDatas
              join ca1 in Categories on cd.week1 equals ca.Record_ID into ca1r
              from ca1 in ca1r.DefaultIfEmpty()
              join ca2 in Categories on cd.week2 equals ca.Record_ID into ca2r
              from ca2 in ca2r.DefaultIfEmpty()
              join ca3 in Categories on cd.week3 equals ca.Record_ID into ca3r
              from ca3 in ca3r.DefaultIfEmpty()
              select new {
                    full_name = cd.full_name,
                    location = cd.location,
                    week1 = ca1,
                    week2 = ca2,
                    week3 = ca3
              }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM