我是.NET的新手,但是现在已经开始研究这个项目,但是进展很少,而且课程数量变得有点压倒性。
目标:
从实体框架表生成数据(假设使用LINQ)< - LINQ似乎正在运行。
将数据转换为XML< -Not working in all
电子邮件,如果不工作< - 这工作得很好奇怪lol;)
任何人都可以通过DataContract连接到一个实体和序列化(可能使用泛型,如果这是最好的方法)给我一个代码示例,通过DataContract连接到XML Writer?根据评论,这里是我想要的样本。 - 所以我们也要说在这个模型中我们要加入“DIRTYMIKE”表,其中包含“The Boys”作为一个对象,其名称将通过xml提取,PRIUS中的“CARS”表由id显然这是一个理论上的一组实体,但希望它能让某人轻笑:)
这里有一些理论课我刚刚掀起 - 希望这能更好地解释目标是什么:
public class TheOtherGuys
{
private static ILog log;
private string theBoysWrapper;
private int rowsRead = 0;
private int outputRecords = 0;
private bool warnings = false;
private bool fatal = false;
private bool fatalMsg = false;
/// <summary>
/// Next wrap the xml with a Document Wrapper and Element Wrapper
/// </summary>
public TheOtherGuys(ILog log)
{
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(dec);//creates root
XmlElement root = doc.CreateElement("DIRTYMIKE");
doc.AppendChild(root);
XmlElement nextElem = doc.CreateElement("THEBOYS");
log = LogManager.GetLogger(this.GetType());
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".Constructor(): enter");
}
//creates new xml Document and set up declaration and root
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".Constructor(): exit");
}
}
//Read data from DIRTY_MIKE_AND_THE_BOYS and CAR Tables
//Translate the results into xml
private void process(DateTime process) {
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(dec);//creates root
XmlElement root = doc.CreateElement("OTHERGUYS");//maybe a conditional statement to change the root to 'OTHERGUYS'
doc.AppendChild(root);
XmlElement nextElem = doc.CreateElement("CAR");
doc.AppendChild(nextElem);
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".process(): enter - prius=" + process);
}
StringBuilder sb = new StringBuilder();
sb.Append(" select ");
sb.Append(" 'PRIUS' CAR, "); // 1
sb.Append(" 'PJM' MKT_CD, "); // 2
sb.Append(" decode(to_char(lh.time_id-1/24, 'HH24'), '00', ");
sb.Append(" to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id-1/24, 'YYYYMMDD')) START_DT, "); // 3
sb.Append(" decode(to_char(lh.time_id-1/24, 'HH24'), '00', ");
sb.Append(" '240000', to_char(lh.time_id-1/24, 'HH24MISS')) START_TIME, "); //4
sb.Append(" decode(to_char(lh.time_id, 'HH24'), '00', ");
sb.Append(" to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id, 'YYYYMMDD')) END_DT, "); // 5
sb.Append(" decode(to_char(lh.time_id, 'HH24'), '00', ");
sb.Append(" '240000', to_char(lh.time_id, 'HH24MISS')) END_TIME, "); // 6
sb.Append(" cars._car_id TX_PT, "); //8
sb.Append(" lh.data_value TARGET_FD "); // 12
sb.Append("from DATABASE.MYTABLE lh, ");
sb.Append(" DATABASE.CAR car_id ");
sb.Append("where lh.car_id = unit.car_id ");
sb.Append("AND lh.time_id > to_date(?, 'MM/DD/YYYY') ");
sb.Append("AND lh.time_id <= to_date(?, 'MM/DD/YYYY' ) + 1 ");
sb.Append("AND lh.atb_data_category = 69 AND lh.data_value <> 0 ");
sb.Append(" order by ");
sb.Append(" lh.time_id, lh.car_id ");
sb.ToString();// or something like that
myDataLayer.theOtherGuysEntitie nme = new myDataLayer.theOtherGuysEntities(myConnection.getEntityFrameworkConnection(typeof(myDataLayer.theOtherGuysEntities)));
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".process(): odb" + odb);
try
{
DateTime dt = DateTime.ParseExact(processingDate.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/M/yyyy");
}catch(Exception e) {
fatal=true;
fatalMsg = true;
if(log.IsFatalEnabled==true) {
log.Fatal(GetType().Name + ".process(): exception", e);
}
Console.Error.WriteLine("The OtherGuys Failed Dirty Mike is in the Prius with name{}, name{1}, name{2}, name {3}.");
//Really I am supposed to use LINQ for the querying
// and then conditionalstatementsthrough my business logic to handle the decoding
再次感谢!!
答案 0 :(得分:4)
public static string ToXmlUsingDataContract<T>(T obj)
{
var dcs = new DataContractSerializer(typeof(T));
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
dcs.WriteObject(writer, obj);
}
return (sb.ToString());
}
只需创建某种数据传输对象,或者直接将Entity对象直接传递给此函数,您将获得有效的,可反序列化的XML。