我正在尝试从XML文件和数据库表列中提取重复项
这是我目前的代码
using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
{
//XML CustomerRefNbr
string[] allFiles = Directory.GetFiles(@"C:\xml\");
foreach (var @CRN in allFiles)
{
XElement xEle = XElement.Load(@CRN);
IEnumerable<XElement> invoices = xEle.Elements();
foreach (XElement pEle in invoices)
{
string c = pEle.Element("CustomerRef").Value;
}
//DB CustomerRefNbr
IEnumerable<string> rs = db.Sales.AsQueryable().Select(crn => crn.CustomerRefNbr);
foreach (string invoice in rs)
{
string i = invoice;
}
}
}
我想要实现的是获取字符串c和i,比较它们是否匹配并将它们放入列表中。
var duplicateCRN= db.Sales.SqlQuery("SELECT * FROM Sales WHERE " + i + "==" + c)
.ToList<Sale>();
不确定我是否正确行事。
答案 0 :(得分:2)
如果我理解正确,你想检查xml中的任何元素是否包含与数据库中任何条目相同的值吗?
你现在在foreach中所做的事情没有做任何事情,因为你只是覆盖了这些值,但却没有做任何事情。
检查此代码:
using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
{
//XML CustomerRefNbr
string[] allFiles = Directory.GetFiles(@"C:\xml\");
foreach (var @CRN in allFiles)
{
XElement xEle = XElement.Load(@CRN);
IEnumerable<XElement> invoices = xEle.Elements();
foreach (XElement pEle in invoices)
{
string c = pEle.Element("CustomerRef").Value;
//DB CustomerRefNbr
IEnumerable<string> rs = db.Sales.AsQueryable().Select(crn => crn.CustomerRefNbr);
foreach (string invoice in rs)
{
if (invoice == c);
//This is a match
}
}
}
}
您也可以直接使用Linq to SQL执行此操作,这是首选方法(更好的性能)
//XML CustomerRefNbr
string[] allFiles = Directory.GetFiles(@"C:\xml\");
foreach (var @CRN in allFiles)
{
XElement xEle = XElement.Load(@CRN);
IEnumerable<XElement> invoices = xEle.Elements();
foreach (XElement pEle in invoices)
{
string c = pEle.Element("CustomerRef").Value;
//DB CustomerRefNbr
using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
{
List<string> rs = db.Sales.Where(s => s.CustomerRefNbr == c).ToList();
if (rs.Any())
{
//all items in rs are matches
}
}
}
}
答案 1 :(得分:1)
你应该在foreach之前初始化字符串i和c。这样您就可以在foreach中填充它,并在以后的代码中使用它。像这样:
using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
{
//XML CustomerRefNbr
string[] allFiles = Directory.GetFiles(@"C:\xml\");
string i = "";
string c = "";
foreach (var @CRN in allFiles)
{
XElement xEle = XElement.Load(@CRN);
IEnumerable<XElement> invoices = xEle.Elements();
foreach (XElement pEle in invoices)
{
c = pEle.Element("CustomerRef").Value;
}
//DB CustomerRefNbr
IEnumerable<string> rs = db.Sales.AsQueryable().Select(crn => crn.CustomerRefNbr);
foreach (string invoice in rs)
{
i = invoice;
}
}
}