我试图弄清楚如何进行一系列查询以将更新,删除和插入分离到自己的调用中。我有2个表,每个表有2个数据库。一个是Read Only feed数据库,另一个是T-SQL R / W Production源。两者之间有一些键列。
我正在设置的是:
List<model.AutoWithImage> feedProductList = _dbFeed.AutoWithImage.Where(a => a.ClientID == ClientID).ToList();
List<model.vwCompanyDetails> companyDetailList = _dbRiv.vwCompanyDetails.Where(a => a.ClientID == ClientID).ToList();
foreach (model.vwCompanyDetails companyDetail in companyDetailList)
{
List<model.Product> productList = _dbRiv.Product.Include("Company").Where(a => a.Company.CompanyId == companyDetail.CompanyId).ToList();
}
现在我有一个来自Feed的产品(源)列表,以及来自我的prod DB的现有(目标)产品列表,我想做三件事:
在不运行双循环的情况下执行此操作的最佳做法是什么?宁愿使用LINQ 4 Objects解决方案,因为我已经拥有了我的对象。
编辑:顺便说一下,我需要在前2个实例中将信息从Feed行传输到目标行,只需在最后一个实例中设置一个标志。
TIA
答案 0 :(得分:1)
LINQ-to-objects方法就像演示一样。在这里,我有两个字符串列表,我想拉取匹配,alphas中的元素不在beta中,而beta中的元素不在alphas中。 LINQ语法非常简单。
List<string> alphas = new List<string>() { "a", "b", "c", "d", "e" };
List<string> betas = new List<string>() { "a", "c", "e", "g", "i" };
var matches = from alpha in alphas
join beta in betas
on alpha equals beta
select alpha;
var noBetas = from alpha in alphas
join beta in betas
on alpha equals beta
into gj
from b in gj.DefaultIfEmpty()
where b == null
select alpha;
var noAlphas = from beta in betas
join alpha in alphas
on beta equals alpha
into gj
from a in gj.DefaultIfEmpty()
where a == null
select beta;
每个的结果都是IEnumerable<string>
,迭代匹配会显示a,c和e。 noBetas会产生b和d。 noAlphas会产生g和i。
我相信这就是你所要求的。通过连接关键字段而不是我的简单场景,将一个字符串等同于另一个字符串,将其应用于对象列表。