[英]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.