如何为此添加额外的过滤器 XML
How to add an additional filter to this XML
我有以下 C# 代码来解析 xml 文档:
XDocument.Load(ConfigurationManager.AppSettings["XDocumentLoad"])
.Root
.Elements(j + "RegisteredOffenders")
.ToList()
.ForEach(element =>
{
//build out the xml namespace for the data parse
var ns = element.GetDefaultNamespace();
var role = element.Element(ns + "RoleOfPerson");
var PersonName = role.Element(ns + "PersonName");
var offender = element.Element(j + "RegisteredOffenderIdentification");
var id = element.Attribute(s + "id").Value;
//This is an inner loop that gets all the addresss for a person and writes the info to the temp strings declared above.
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id).ToList().ForEach(ad =>
{
string aCode = ad.Element(sc + "AddressCategoryCode").Value;
switch (aCode.ToUpper())
{
case "TEMP":
string TempAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string TempStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Tempcity = ad.Element(ns + "LocationCityName").Value;
string Tempstate = ad.Element(sc + "LocationUSStateCode").Value;
string TempzipOne = ad.Element(ns + "LocationPostalCode").Value;
string TempzipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
TempLocation = string.Format("{0},{1},{2},{3},{4}", TempStreet, Tempcity, TempStreet, TempzipOne, TempzipTwo);
break;
case "PERM":
string PermAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string PermStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Permcity = ad.Element(ns + "LocationCityName").Value;
string PermCounty = ad.Element(sc + "LocationNonFLCounty").Value;
string Permstate = ad.Element(sc + "LocationUSStateCode").Value;
string PermzipOne = ad.Element(ns + "LocationPostalCode").Value;
string PermzipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
PermLocation = string.Format("{0},{1},{2},{3},{4},{5}", PermStreet, Permcity, PermCounty, Permstate, PermzipOne, PermzipTwo);
break;
case "TRANS":
string TransAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string TransStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Transcity = ad.Element(ns + "LocationCityName").Value;
string Transstate = ad.Element(sc + "LocationUSStateCode").Value;
string TranszipOne = ad.Element(ns + "LocationPostalCode").Value;
string TranszipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
TransLocation = string.Format("{0},{1},{2},{3},{4}", TransStreet, Transcity, TransStreet, TranszipOne, TranszipTwo);
break;
}
}
);
我现在需要添加到 linq 查询以进一步过滤数据。现在过滤的数据点是xml地址部分的县信息。我试过使用这段代码,但它无法编译。
XDocument.Load(ConfigurationManager.AppSettings["XDocumentLoad"])
.Root
.Elements(j + "RegisteredSexOffender")
.ToList()
.ForEach(element =>
{
//build out the xml namespace for the data parse
var ns = element.GetDefaultNamespace();
var role = element.Element(ns + "RoleOfPerson");
var PersonName = role.Element(ns + "PersonName");
var offender = element.Element(j + "RegisteredOffenderIdentification");
var id = element.Attribute(s + "id").Value;
//This is an inner loop that gets all the addresss for a person and writes the info to the temp strings declared above.
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id) && element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE").ToList().ForEach(ad =>
{
如您所见,我尝试在 linq 语句中添加一个 and 子句,但没有成功。
我能够编译这行代码,但现在我没有得到任何记录
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id && a.Element(sc + "LocationNonFLCounty").Value == "Orange").ToList().ForEach(ad =>
您需要学习对代码进行分段。这样的单行本很难读懂。
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id).ToList().ForEach(ad =>
// this line has 334 characters...
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id) && element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE").ToList().ForEach(ad =>
这是第 2 行,您要修改的行:
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
.Where(a => a.Element(se + "offenderIdRef").Value == id)
&& // this is not how you 'add' another 'filter'(where clause)
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
.Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE") // I think you mean to compare a *single* element to "ORANGE"
.ToList().ForEach(ad =>
您需要链接您的 where
子句或将它们组合在同一个 where
子句中:
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
// chaining (pick one)
.Where(a => a.Element(se + "offenderIdRef").Value == id)
.Where(a => a.Element(sc + "LocationNonFLCounty").Value == "ORANGE")
// combined (pick one)
.Where(a =>
a.Element(se + "offenderIdRef").Value == id &&
a.Element(sc + "LocationNonFLCounty").Value == "ORANGE")
.ToList().ForEach(ad =>
我有以下 C# 代码来解析 xml 文档:
XDocument.Load(ConfigurationManager.AppSettings["XDocumentLoad"])
.Root
.Elements(j + "RegisteredOffenders")
.ToList()
.ForEach(element =>
{
//build out the xml namespace for the data parse
var ns = element.GetDefaultNamespace();
var role = element.Element(ns + "RoleOfPerson");
var PersonName = role.Element(ns + "PersonName");
var offender = element.Element(j + "RegisteredOffenderIdentification");
var id = element.Attribute(s + "id").Value;
//This is an inner loop that gets all the addresss for a person and writes the info to the temp strings declared above.
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id).ToList().ForEach(ad =>
{
string aCode = ad.Element(sc + "AddressCategoryCode").Value;
switch (aCode.ToUpper())
{
case "TEMP":
string TempAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string TempStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Tempcity = ad.Element(ns + "LocationCityName").Value;
string Tempstate = ad.Element(sc + "LocationUSStateCode").Value;
string TempzipOne = ad.Element(ns + "LocationPostalCode").Value;
string TempzipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
TempLocation = string.Format("{0},{1},{2},{3},{4}", TempStreet, Tempcity, TempStreet, TempzipOne, TempzipTwo);
break;
case "PERM":
string PermAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string PermStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Permcity = ad.Element(ns + "LocationCityName").Value;
string PermCounty = ad.Element(sc + "LocationNonFLCounty").Value;
string Permstate = ad.Element(sc + "LocationUSStateCode").Value;
string PermzipOne = ad.Element(ns + "LocationPostalCode").Value;
string PermzipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
PermLocation = string.Format("{0},{1},{2},{3},{4},{5}", PermStreet, Permcity, PermCounty, Permstate, PermzipOne, PermzipTwo);
break;
case "TRANS":
string TransAddressCode = ad.Element(sc + "AddressCategoryCode").Value;
string TransStreet = ad.Element(ns + "LocationStreet").Element(ns + "StreetFullText").Value;
string Transcity = ad.Element(ns + "LocationCityName").Value;
string Transstate = ad.Element(sc + "LocationUSStateCode").Value;
string TranszipOne = ad.Element(ns + "LocationPostalCode").Value;
string TranszipTwo = ad.Element(ns + "LocationPostalExtensionCode").Value;
TransLocation = string.Format("{0},{1},{2},{3},{4}", TransStreet, Transcity, TransStreet, TranszipOne, TranszipTwo);
break;
}
}
);
我现在需要添加到 linq 查询以进一步过滤数据。现在过滤的数据点是xml地址部分的县信息。我试过使用这段代码,但它无法编译。
XDocument.Load(ConfigurationManager.AppSettings["XDocumentLoad"])
.Root
.Elements(j + "RegisteredSexOffender")
.ToList()
.ForEach(element =>
{
//build out the xml namespace for the data parse
var ns = element.GetDefaultNamespace();
var role = element.Element(ns + "RoleOfPerson");
var PersonName = role.Element(ns + "PersonName");
var offender = element.Element(j + "RegisteredOffenderIdentification");
var id = element.Attribute(s + "id").Value;
//This is an inner loop that gets all the addresss for a person and writes the info to the temp strings declared above.
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id) && element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE").ToList().ForEach(ad =>
{
如您所见,我尝试在 linq 语句中添加一个 and 子句,但没有成功。
我能够编译这行代码,但现在我没有得到任何记录
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id && a.Element(sc + "LocationNonFLCounty").Value == "Orange").ToList().ForEach(ad =>
您需要学习对代码进行分段。这样的单行本很难读懂。
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id).ToList().ForEach(ad =>
// this line has 334 characters...
element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Where(a => a.Element(se + "offenderIdRef").Value == id) && element.Document.Root.Element(se + "SopsOffenderAddressList").Elements(se + "SopsOffenderAddress").Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE").ToList().ForEach(ad =>
这是第 2 行,您要修改的行:
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
.Where(a => a.Element(se + "offenderIdRef").Value == id)
&& // this is not how you 'add' another 'filter'(where clause)
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
.Elemetns(sc + "LocationNonFLCounty").Value=="ORANGE") // I think you mean to compare a *single* element to "ORANGE"
.ToList().ForEach(ad =>
您需要链接您的 where
子句或将它们组合在同一个 where
子句中:
element.Document.Root
.Element(se + "SopsOffenderAddressList")
.Elements(se + "SopsOffenderAddress")
// chaining (pick one)
.Where(a => a.Element(se + "offenderIdRef").Value == id)
.Where(a => a.Element(sc + "LocationNonFLCounty").Value == "ORANGE")
// combined (pick one)
.Where(a =>
a.Element(se + "offenderIdRef").Value == id &&
a.Element(sc + "LocationNonFLCounty").Value == "ORANGE")
.ToList().ForEach(ad =>