Рейтинг:
23
Karthik_Mahalingam
попробовать это
DataTable dt1 = new DataTable();
dt1.Columns.Add("ID");
dt1.Columns.Add("Name");
dt1.Rows.Add(101, "ABC");
dt1.Rows.Add(102, "XYZ");
dt1.Rows.Add(103, "MNO");
dt1.Rows.Add(104, "PQR");
DataTable dt2 = new DataTable();
dt2.Columns.Add("ID");
dt2.Columns.Add("Name");
dt2.Rows.Add(101, "FGH");
dt2.Rows.Add(102, "XYZ");
dt2.Rows.Add(104, "GPS");
DataTable dtOutput = dt1.Rows.OfType<DataRow>().Where(a=> dt1.Rows.OfType<DataRow>().Select(k=> Convert.ToInt32(k["ID"])).Except( dt2.Rows.OfType<DataRow>().Select(k=> Convert.ToInt32(k["ID"])).ToList()).Contains( Convert.ToInt32( a["ID"]))).CopyToDataTable();
kumari567
этот код вызывает исключение.... исходная таблица не содержит ни одной строки
Karthik_Mahalingam
проверить это
if ((dt1 != null && dt1.Rows.Граф и gt; 0) и усилитель; & (ст2 != нуль &амп;&амп; ст2.Строк.Count > 0))
{
DataTable dtOutput = dt1.Rows.Метод oftype&ЛТ;строкаданных и GT;().Где(а => у ст1.Строк.Метод oftype&ЛТ;строкаданных и GT;().Выберите(к =&ГТ; преобразование.ToInt32(k["ID"])). Except(dt2.Rows.Метод oftype&ЛТ;строкаданных и GT;().Выберите(к =&ГТ; преобразование.ToInt32(k["ID"])).Толист()).Содержит(Convert.ToInt32(a["ID"]))). Copytodatable();
}
kumari567
и все же у меня есть исключение
Исключение типа 'System.InvalidOperationException' произошло в System.Data.DataSetExtensions.dll, но не был обработан в пользовательском коде
Дополнительная информация: источник не содержит потоков данных.
kumari567
мой код таков
if ((dt != null && dt.строки.Граф и gt; 0) и усилитель; & (myDataTable != нуль &амп;&амп; myDataTable.Строк.Count > 0))
{
dtExtraRowOfXml = dt.Rows.Метод oftype&ЛТ;строкаданных и GT;().Где(а => по ДТ.Строк.Метод oftype&ЛТ;строкаданных и GT;().
Выберите(k => конвертировать.ToString(k["Station"])). Except(myDataTable.Rows.Метод oftype&ЛТ;строкаданных и GT;().Выберите(к =&ГТ; преобразование.ToString(k["станция"])).Толист()).Содержит(Convert.ToString(a["станция"]))). Copytodatable();
}
Karthik_Mahalingam
попробовать это..
DataTable dtOutput = new DataTable();
if ((dt1 != null && dt1.Rows.Count > 0) && (dt2 != null && dt2.Rows.Count > 0))
{
var temp = dt1.Rows.OfType < DataRow >().Where(a => dt1.Rows.OfType < DataRow > ().Select(k => Convert.ToInt32(k["ID"])).Except(dt2.Rows.OfType < DataRow > ().Select(k => Convert.ToInt32(k["ID"])).ToList()).Contains(Convert.ToInt32(a["ID"])));
if(temp != null && temp.Count() >0)
dtOutput = temp.CopyToDataTable();
}
kumari567
это правильный код, или я должен его изменить .
Потому что я не думаю, что мы можем напрямую скопировать тип var temp в datadable
if(temp != null && temp.Count() >0)
dtOutput = temp.CopyToDataTable();
Karthik_Mahalingam
просто скопируйте и вставьте его , он будет работать. что плохого в том, чтобы попытаться..
изменить значение ID для вашего
kumari567
да я так и сделал но некоторые ошибки приближаются
Karthik_Mahalingam
опубликуйте свой код.
kumari567
сэр я написал ниже пожалуйста смотрите
Karthik_Mahalingam
попробовать это
Объект DataTable dtfinalXml;
если (dtExtraRowOfXml.Строк.Count > 0)
{
var temp = myDataTable.AsEnumerable().Union(dtExtraRowOfXml.AsEnumerable(), DataRowComparer.По умолчанию);
if (temp != null && temp.Count() > 0)
dtfinalXml = temp.CopyToDataTable();
}
держите точку останова и проверьте, в какой строке вы получаете ошибку
kumari567
код ОКК если у нас есть больше строк в dt1 которых нет в dt2 но проблема возникает когда есть одна и та же строка в обеих таблицах
kumari567
ВАР темп = ДТ.Строк.Метод oftype&ЛТ;строкаданных и GT;().Где(а => по ДТ.Строк.Метод oftype&ЛТ;строкаданных и GT;().
Выберите(k => конвертировать.ToString(k["Station"])). Except(myDataTable.Rows.Метод oftype&ЛТ;строкаданных и GT;().Выберите(к =&ГТ; преобразование.ToString(k["станция"])).Толист()).Содержит(Convert.Метод toString(а [станция""]))).CopyToDataTable().Методом asenumerable();
Я получаю ошибку в приведенном выше коде, когда в dt1 нет дополнительной строки
Karthik_Mahalingam
видите ли, вы получаете эту ошибку из-за [.CopyToDataTable() ]
если значение datarow[] равно null или count равно 0, то вы получите ошибку
поэтому перед вызовом этой функции [.CopyToDataTable ()] проверьте наличие not null и count >0
Member 13041105
что делать, если я хочу проверить все столбцы, если есть mistmatch ? как мне сделать это, пожалуйста, помогите им новые возможности C#
Karthik_Mahalingam
тот же код, добавив все столбцы условия.
kumari567
Спасибо, большое спасибо ......Вы очень хорошо понимаете эту проблему ...и дайте хорошее объяснение ...большое спасибо за ваше время.. большое вам спасибо ...:)
Karthik_Mahalingam
добро пожаловать :)
Рейтинг:
1
Amit Kumar Mohanty
public DataTable getDiffRecords(DataTable dtDataOne, DataTable dtDataTwo)
{
DataTable returnTable = new DataTable("returnTable");
using (DataSet ds = new DataSet())
{
ds.Tables.AddRange(new DataTable[] { dtDataOne.Copy(), dtDataTwo.Copy() });
DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
for (int i = 0; i < firstColumns.Length; i++)
{
firstColumns[i] = ds.Tables[0].Columns[i];
}
DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
for (int i = 0; i < secondColumns.Length; i++)
{
secondColumns[i] = ds.Tables[1].Columns[i];
}
DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
ds.Relations.Add(r1);
DataRelation r2 = new DataRelation(string.Empty, secondColumns, firstColumns, false);
ds.Relations.Add(r2);
for (int i = 0; i < dtDataOne.Columns.Count; i++)
{
returnTable.Columns.Add(dtDataOne.Columns[i].ColumnName, dtDataOne.Columns[i].DataType);
}
returnTable.BeginLoadData();
foreach (DataRow parentrow in ds.Tables[0].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r1);
if (childrows == null || childrows.Length == 0)
returnTable.LoadDataRow(parentrow.ItemArray, true);
}
foreach (DataRow parentrow in ds.Tables[1].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r2);
if (childrows == null || childrows.Length == 0)
returnTable.LoadDataRow(parentrow.ItemArray, true);
}
returnTable.EndLoadData();
}
return returnTable;
}
Рейтинг:
0
kumari567
DataSet ds=new DataSet();
DataSet ds1 = new DataSet();
ds1.ReadXml(HttpContext.Current.Server.MapPath("XML/myFile.xml"));
DataTable dt1 = ds1.Tables[0];
var query = (from p in dt.AsEnumerable()join t in dt1.AsEnumerable()
on p.Field<string>("Station") equals t.Field<string>("Station")
select new
{
Station = p.Field<string>("Station"),
Max_Temp = p.Field<string>("Max_Temp"),
Min_Temp = p.Field<string>("Min_Temp"),
Weather_Detail = p.Field<string>("Weather_Detail"),
DateTime = p.Field<string>("DateTime")
});
DataTable myDataTable = new DataTable();
myDataTable.Columns.Add("DateTime", typeof(string));
myDataTable.Columns.Add("Station", typeof(string));
myDataTable.Columns.Add("Max_Temp", typeof(string));
myDataTable.Columns.Add("Min_Temp", typeof(string));
myDataTable.Columns.Add("Weather_Detail", typeof(string));
foreach (var element in query)
{
var row = myDataTable.NewRow();
row["DateTime"] = element.DateTime;
row["Station"] = element.Station;
row["Max_Temp"] = element.Max_Temp;
row["Min_Temp"] = element.Min_Temp;
row["Weather_Detail"] = element.Weather_Detail;
myDataTable.Rows.Add(row);
}
DataTable dtExtraRowOfXml = new DataTable();
if ((dt !=null && dt.Rows.Count > 0) && (myDataTable != null && myDataTable.Rows.Count > 0))
{
var temp = dt.Rows.OfType<DataRow>().Where(a => dt.Rows.OfType<DataRow>().
Select(k => Convert.ToString(k["Station"])).Except(myDataTable.Rows.OfType<DataRow>().Select(k => Convert.ToString(k["Station"])).ToList()).Contains(Convert.ToString(a["Station"]))).CopyToDataTable().AsEnumerable();
if (temp != null && temp.Count() > 0)
dtExtraRowOfXml = temp.CopyToDataTable();
}
DataTable dtfinalXml;
if (dtExtraRowOfXml.Rows.Count > 0)
dtfinalXml = myDataTable.AsEnumerable().Union(dtExtraRowOfXml.AsEnumerable(), DataRowComparer.Default).CopyToDataTable();
else
{
dtfinalXml = myDataTable.Clone();
}
ds.Tables.Add(dtfinalXml);
// ds.Tables.Add(myDataTable);
string strXml = ds.GetXml();
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(strXml);
xDoc.Save(HttpContext.Current.Server.MapPath("XML/myFile.xml")); //XML is the folder name and myFile.xml is ur new file name