簡體   English   中英

C#如何通過Linq查詢將列添加到現有數據表中的每個數據行?

[英]C# How do you add a column to an existing datatable for each data row by Linq query?

我有一個已讀入數據表的CSV文件。 我必須為每個“成員ID”抓取並連接某些字段值。 我為此創建了一個LINQ查詢,並獲取了我需要的數據和“成員ID”。

我正在努力將兩個數據集連接在一起,或者在DataTable中創建新列,或者從連接中創建新DataTable。

DataTable csvData = GetDataTabletFromCSVFile(csv_file_path);


var query =
    from data in csvData.AsEnumerable()
    group data by data.Field<string>("MEMBER ID") into g
    select new
    {
        MemberId = g.Key,
        Reason1 = g.Select(x => x.Field<string>("CLAIM HEADER REASON1") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION1")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason2 = g.Select(x => x.Field<string>("CLAIM HEADER REASON2") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION2")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason3 = g.Select(x => x.Field<string>("CLAIM HEADER REASON3") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION3")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason4 = g.Select(x => x.Field<string>("CLAIM HEADER REASON4") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION4")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason5 = g.Select(x => x.Field<string>("CLAIM HEADER REASON5") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION5")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason6 = g.Select(x => x.Field<string>("CLAIM HEADER REASON6") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION6")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason7 = g.Select(x => x.Field<string>("CLAIM HEADER REASON7") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION7")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason8 = g.Select(x => x.Field<string>("CLAIM HEADER REASON8") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION8")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason9 = g.Select(x => x.Field<string>("CLAIM HEADER REASON9") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION9")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason10 = g.Select(x => x.Field<string>("CLAIM HEADER REASON10") + "-  " + x.Field<string>("CLAIM HEADER REASON DESCRIPTION10")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason11 = g.Select(x => x.Field<string>("LINE ITEM REASON1") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION1")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason12 = g.Select(x => x.Field<string>("LINE ITEM REASON2") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION2")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason13 = g.Select(x => x.Field<string>("LINE ITEM REASON3") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION3")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason14 = g.Select(x => x.Field<string>("LINE ITEM REASON4") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION4")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason15 = g.Select(x => x.Field<string>("LINE ITEM REASON5") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION5")).Where(y => y != "-  ").Distinct().FirstOrDefault(),
        Reason16 = g.Select(x => x.Field<string>("LINE ITEM REASON6") + "-  " + x.Field<string>("LINE ITEM REASON DESCRIPTION6")).Where(y => y != "-  ").Distinct().FirstOrDefault()
    };

var results =
    from r in query
    select new
    {
        MemberId = r.MemberId,
        Reason = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}",
                               string.IsNullOrWhiteSpace(r.Reason1) ? string.Empty : r.Reason1.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason2) ? string.Empty : r.Reason2.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason3) ? string.Empty : r.Reason3.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason4) ? string.Empty : r.Reason4.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason5) ? string.Empty : r.Reason5.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason6) ? string.Empty : r.Reason6.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason7) ? string.Empty : r.Reason7.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason8) ? string.Empty : r.Reason8.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason9) ? string.Empty : r.Reason9.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason10) ? string.Empty : r.Reason10.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason11) ? string.Empty : r.Reason11.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason12) ? string.Empty : r.Reason12.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason13) ? string.Empty : r.Reason13.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason14) ? string.Empty : r.Reason14.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason15) ? string.Empty : r.Reason15.Trim() + "|!|",
                               string.IsNullOrWhiteSpace(r.Reason16) ? string.Empty : r.Reason16.Trim() + "|!|")
    };

這部分很好。 我有我需要的。 以下代碼是我努力的地方。

var output =
    from r in results.AsEnumerable()
    join c in csvData.AsEnumerable()
        on r.MemberId equals c.Field<string>("MEMBER ID")
    select new
    {
        c,
        r.Reason
    };

在我的輸出中,我得到“ System.Data.DataRow,MyConcatenatedData”

我知道這一定很簡單,但是我幾乎沒有睡覺,所以任何幫助將不勝感激。

您正在獲得輸出

System.Data.DataRow

因為在選擇查詢中,您選擇了對象c而不是其字段。 您的查詢應為。

var output =
    from r in results.AsEnumerable()
    join c in csvData.AsEnumerable()
        on r.MemberId equals c.Field<string>("MEMBER ID")
    select new
    {
        c.Field1FromcsvData,
        c.Field2FromcsvData,
        r.Reason
    };

暫無
暫無

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

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