Concatenating rows in DataTable with specific condition
I have a DataTable dtTexts
like this
varenummer text ID Brand LineNumber
100 sometext-name 0 nike 0
100 sometext -longdesc 2 nike 2
100 sometext-shortdesc 1 nike 0
100 sometext -longdesc-2 2 nike 0
I am converting this to another datatable like this
var myRows = from myRow in dtTexts.AsEnumerable()
where myRow.Field<string>("Varenummer") == "100"
select myRow;
DataRow newRow = dtFinalData.NewRow();
bool firstRow = true;
foreach (var drText in myRows)
{
if (firstRow)
{
firstRow = false;
newRow["Varenummer"] = drText.ItemArray[0];
newRow["Brand"] = drText.ItemArray[3];
}
if (drText.ItemArray[2].ToString() == "0")
{
newRow["Varenavn"] = drText.ItemArray[1].ToString();
}
if (drText.ItemArray[2].ToString() == "1")
{
newRow["ShortDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
}
dtFinalData.Rows.Add(newRow);
and getting an output like this
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc
Now the problem is I have two lines of Long description in my first dataTable. I want to concatenate them on the basis of linenumber
column.So that I get an out put like
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc+ sometext -longdesc-2
How can I do this in C#?
c# datatable
add a comment |
I have a DataTable dtTexts
like this
varenummer text ID Brand LineNumber
100 sometext-name 0 nike 0
100 sometext -longdesc 2 nike 2
100 sometext-shortdesc 1 nike 0
100 sometext -longdesc-2 2 nike 0
I am converting this to another datatable like this
var myRows = from myRow in dtTexts.AsEnumerable()
where myRow.Field<string>("Varenummer") == "100"
select myRow;
DataRow newRow = dtFinalData.NewRow();
bool firstRow = true;
foreach (var drText in myRows)
{
if (firstRow)
{
firstRow = false;
newRow["Varenummer"] = drText.ItemArray[0];
newRow["Brand"] = drText.ItemArray[3];
}
if (drText.ItemArray[2].ToString() == "0")
{
newRow["Varenavn"] = drText.ItemArray[1].ToString();
}
if (drText.ItemArray[2].ToString() == "1")
{
newRow["ShortDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
}
dtFinalData.Rows.Add(newRow);
and getting an output like this
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc
Now the problem is I have two lines of Long description in my first dataTable. I want to concatenate them on the basis of linenumber
column.So that I get an out put like
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc+ sometext -longdesc-2
How can I do this in C#?
c# datatable
add a comment |
I have a DataTable dtTexts
like this
varenummer text ID Brand LineNumber
100 sometext-name 0 nike 0
100 sometext -longdesc 2 nike 2
100 sometext-shortdesc 1 nike 0
100 sometext -longdesc-2 2 nike 0
I am converting this to another datatable like this
var myRows = from myRow in dtTexts.AsEnumerable()
where myRow.Field<string>("Varenummer") == "100"
select myRow;
DataRow newRow = dtFinalData.NewRow();
bool firstRow = true;
foreach (var drText in myRows)
{
if (firstRow)
{
firstRow = false;
newRow["Varenummer"] = drText.ItemArray[0];
newRow["Brand"] = drText.ItemArray[3];
}
if (drText.ItemArray[2].ToString() == "0")
{
newRow["Varenavn"] = drText.ItemArray[1].ToString();
}
if (drText.ItemArray[2].ToString() == "1")
{
newRow["ShortDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
}
dtFinalData.Rows.Add(newRow);
and getting an output like this
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc
Now the problem is I have two lines of Long description in my first dataTable. I want to concatenate them on the basis of linenumber
column.So that I get an out put like
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc+ sometext -longdesc-2
How can I do this in C#?
c# datatable
I have a DataTable dtTexts
like this
varenummer text ID Brand LineNumber
100 sometext-name 0 nike 0
100 sometext -longdesc 2 nike 2
100 sometext-shortdesc 1 nike 0
100 sometext -longdesc-2 2 nike 0
I am converting this to another datatable like this
var myRows = from myRow in dtTexts.AsEnumerable()
where myRow.Field<string>("Varenummer") == "100"
select myRow;
DataRow newRow = dtFinalData.NewRow();
bool firstRow = true;
foreach (var drText in myRows)
{
if (firstRow)
{
firstRow = false;
newRow["Varenummer"] = drText.ItemArray[0];
newRow["Brand"] = drText.ItemArray[3];
}
if (drText.ItemArray[2].ToString() == "0")
{
newRow["Varenavn"] = drText.ItemArray[1].ToString();
}
if (drText.ItemArray[2].ToString() == "1")
{
newRow["ShortDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
}
dtFinalData.Rows.Add(newRow);
and getting an output like this
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc
Now the problem is I have two lines of Long description in my first dataTable. I want to concatenate them on the basis of linenumber
column.So that I get an out put like
varenummer brand varenavn shortdescription longDescription
100 nike sometext-name sometext-shortdesc sometext -longdesc+ sometext -longdesc-2
How can I do this in C#?
c# datatable
c# datatable
edited Nov 19 '18 at 6:43
Cœur
17.8k9106145
17.8k9106145
asked May 14 '14 at 6:37
AthulAthul
2,7941456129
2,7941456129
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Instead of overwriting newRow["LongDescription"]
, just concatenate the values:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] += Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, if you want some kind of seperator:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = newRow["LongDescription"] +
(String.IsNullOrWhiteSpace(r.Field<string>(4)) ? "" : "n") +
Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, since you're already using Linq:
// assuming there's always a single row with ID == 0 and one with ID == 1
var result = dtTextslike.AsEnumerable()
.GroupBy(row => row["varenummer"])
.Select(grp => new object
{
grp.Key,
grp.First()["brand"],
grp.Single(r => r.Field<int>("ID") == 0)["text"],
grp.Single(r => r.Field<int>("ID") == 1)["text"],
String.Join("n", grp.Where(r => r.Field<int>("ID") == 2)
.OrderByDescending(r => r.Field<int>("LineNumber"))
.Select(r => r.Field<string>("text")))
});
foreach(var line in result)
dtFinal.Rows.Add(line);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f23647300%2fconcatenating-rows-in-datatable-with-specific-condition%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Instead of overwriting newRow["LongDescription"]
, just concatenate the values:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] += Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, if you want some kind of seperator:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = newRow["LongDescription"] +
(String.IsNullOrWhiteSpace(r.Field<string>(4)) ? "" : "n") +
Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, since you're already using Linq:
// assuming there's always a single row with ID == 0 and one with ID == 1
var result = dtTextslike.AsEnumerable()
.GroupBy(row => row["varenummer"])
.Select(grp => new object
{
grp.Key,
grp.First()["brand"],
grp.Single(r => r.Field<int>("ID") == 0)["text"],
grp.Single(r => r.Field<int>("ID") == 1)["text"],
String.Join("n", grp.Where(r => r.Field<int>("ID") == 2)
.OrderByDescending(r => r.Field<int>("LineNumber"))
.Select(r => r.Field<string>("text")))
});
foreach(var line in result)
dtFinal.Rows.Add(line);
add a comment |
Instead of overwriting newRow["LongDescription"]
, just concatenate the values:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] += Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, if you want some kind of seperator:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = newRow["LongDescription"] +
(String.IsNullOrWhiteSpace(r.Field<string>(4)) ? "" : "n") +
Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, since you're already using Linq:
// assuming there's always a single row with ID == 0 and one with ID == 1
var result = dtTextslike.AsEnumerable()
.GroupBy(row => row["varenummer"])
.Select(grp => new object
{
grp.Key,
grp.First()["brand"],
grp.Single(r => r.Field<int>("ID") == 0)["text"],
grp.Single(r => r.Field<int>("ID") == 1)["text"],
String.Join("n", grp.Where(r => r.Field<int>("ID") == 2)
.OrderByDescending(r => r.Field<int>("LineNumber"))
.Select(r => r.Field<string>("text")))
});
foreach(var line in result)
dtFinal.Rows.Add(line);
add a comment |
Instead of overwriting newRow["LongDescription"]
, just concatenate the values:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] += Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, if you want some kind of seperator:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = newRow["LongDescription"] +
(String.IsNullOrWhiteSpace(r.Field<string>(4)) ? "" : "n") +
Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, since you're already using Linq:
// assuming there's always a single row with ID == 0 and one with ID == 1
var result = dtTextslike.AsEnumerable()
.GroupBy(row => row["varenummer"])
.Select(grp => new object
{
grp.Key,
grp.First()["brand"],
grp.Single(r => r.Field<int>("ID") == 0)["text"],
grp.Single(r => r.Field<int>("ID") == 1)["text"],
String.Join("n", grp.Where(r => r.Field<int>("ID") == 2)
.OrderByDescending(r => r.Field<int>("LineNumber"))
.Select(r => r.Field<string>("text")))
});
foreach(var line in result)
dtFinal.Rows.Add(line);
Instead of overwriting newRow["LongDescription"]
, just concatenate the values:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] += Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, if you want some kind of seperator:
if (drText.ItemArray[2].ToString() == "2")
{
newRow["LongDescription"] = newRow["LongDescription"] +
(String.IsNullOrWhiteSpace(r.Field<string>(4)) ? "" : "n") +
Regex.Replace(drText.ItemArray[1].ToString(), "<.+?>", string.Empty);
}
Or, since you're already using Linq:
// assuming there's always a single row with ID == 0 and one with ID == 1
var result = dtTextslike.AsEnumerable()
.GroupBy(row => row["varenummer"])
.Select(grp => new object
{
grp.Key,
grp.First()["brand"],
grp.Single(r => r.Field<int>("ID") == 0)["text"],
grp.Single(r => r.Field<int>("ID") == 1)["text"],
String.Join("n", grp.Where(r => r.Field<int>("ID") == 2)
.OrderByDescending(r => r.Field<int>("LineNumber"))
.Select(r => r.Field<string>("text")))
});
foreach(var line in result)
dtFinal.Rows.Add(line);
answered May 14 '14 at 7:06
slothsloth
73.7k14127168
73.7k14127168
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f23647300%2fconcatenating-rows-in-datatable-with-specific-condition%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown