C# 尝试将项添加到c中的linq select语句
我在linq中有一个很长的结果集,它放在ratestest中,我正在将结果映射到ChargeElementsAllable。问题是这不包括收费记录,因为C# 尝试将项添加到c中的linq select语句,c#,linq,C#,Linq,我在linq中有一个很长的结果集,它放在ratestest中,我正在将结果映射到ChargeElementsAllable。问题是这不包括收费记录,因为 var fees = (from r in _dbContext.Rates where r.RateTypeFK == RateType.Fee && (r.LocaleBW & localeid) > 0 && (r.PolicyBW & polic
var fees = (from r in _dbContext.Rates
where r.RateTypeFK == RateType.Fee && (r.LocaleBW & localeid) > 0 && (r.PolicyBW & policy.BitWise) > 0 && r.RateExclude == 0
select r);
所以我想将费用添加到ratestest,我可以再次进行映射,这样我就可以使用add方法,但我不想只对一条记录进行冗长的映射。。我试图将其直接添加到ratestest中。。但是没有快乐。。。我尝试使用DefaultIfEmpty,希望使用左联接。。但是费仍然不在那里
var ratestest = (from qi in quoteInputs
join r in _dbContext.Rates on qi.RatePK equals r.RatePK
join fee in fees on r.RatePK equals fee.RatePK into feecontainer
from fee in feecontainer.DefaultIfEmpty()
join c in _dbContext.Covers on r.CoverCalcFK equals c.CoverPK into covers
from c in covers.DefaultIfEmpty()
join rt in _dbContext.RateTypes on qi.RateTypeFK equals rt.RateTypePK
where rt.Ratable == 1 ||
rt.RateTypePK == RateType.PostCode ||
rt.RateTypePK == RateType.Fee// employersliab.Contains(r.InputFK)
select new ChargeElementsNullable
{
PolicyFK = quote.PolicyFK,
InputFK = r.InputFK,
LongRate = r.LongRate,
RateLabel = r.RateLabel,
CoverName = c.CoverName,
CoverFK = r.CoverCalcFK,
CoverBW = c.BitWise,
ListRatePK = r.ListRatePK,
RatePK = r.RatePK,
RateName = r.RateName,
Rate = r.Rate,
Threshold = r.Threshold,
Excess = r.Excess,
DivBy = r.DivBy,
DiscountFirstRate = r.DiscountFirstRate,
DiscountSubsequentRate = r.DiscountSubsequentRate,
HazardRating = r.HazardRating,
TableFirstColumn = r.TableFirstColumn,
TableChildren = r.TableChildren,
RateTypeFK = r.RateTypeFK,
PageNo = r.PageNo,
SumInsured = qi.SumInsured,
NoItems = qi.NoItems,
RateValue = qi.RateValue,
TriggerCode = rt.TriggerCode,
Territory = territory
}).ToList();
您必须创建一个具有两个属性的模型,一个用于报价输入,另一个用于费用。然后你只需要选择两个。 例如: 然后在select子句中调用use this model,并直接将此模型分配给表 现在,让我们使用您的代码并更改如下选择:
var ratestest = (from qi in quoteInputs
join r in _dbContext.Rates on qi.RatePK equals r.RatePK
join fee in fees on r.RatePK equals fee.RatePK into feecontainer
from fee in feecontainer.DefaultIfEmpty()
join c in _dbContext.Covers on r.CoverCalcFK equals c.CoverPK into covers
from c in covers.DefaultIfEmpty()
join rt in _dbContext.RateTypes on qi.RateTypeFK equals rt.RateTypePK
where rt.Ratable == 1 ||
rt.RateTypePK == RateType.PostCode ||
rt.RateTypePK == RateType.Fee// employersliab.Contains(r.InputFK)
select new model1{
quoteInputs = qi,
fees = fee
}).ToList();
正如您在评论中提到的,您正在寻找Concat方法。可以这样做:
var fees = from ...
select new ChargeElementsNullable {
Prop1 = (some value),
Prop2 = (other value)
}
var ratestest = from ...
select new ChargeElementsNullable {
Prop1 = (some value),
Prop2 = (other value)
}
var bothtogether = fees.Concat(ratestest);
确保所有属性的顺序完全相同,并且所有属性都在两个选择中。否则,获取结果时Linq2Sql将失败。我从您的代码中假设您正在使用它
正如@Cris在评论中正确指出的,相同的顺序是不必要的。添加意味着连接两个序列?是的,我的意思是连接,谢谢什么类型是quoteInputs?它来自哪里?单独的表格?如何选择费用属性?到目前为止,我有这个。。{var modeltest=new Model1{quoteInputs=quoteInputs,fees=fee};var rates=modeltest中的qi。quoteInputs在{u dbContext.rates on qi.RatePK等于r.RatePK}中加入r,这是一个输入错误。您可以像这样选择:选择新模型1{quoteInputs=qi,fees=fee,…}是正确的。您只需要将更多表的属性添加到模型中,然后直接从联接中选择完整的表。这就是你的意思,你是说费属性被当作另一个连接使用?但是我尝试了一个独立的费用记录。我很确定你不需要在这里按相同的顺序使用这些属性。如果它是一个匿名对象,这可能是另一个问题,但由于我们正在创建一个IEnumerable,那么重要的是它们都是相同的类型。不,我想避免将费用单独映射到ChargeElement,因为这是20多行代码。我只是想以某种方式将其添加到我的ratestest select中。@Luke好的,那么,您能提供数据库结构的最小示例吗?我相信这将有助于创建一个您正在寻找的查询。@Chris thx,请更正。我记得在使用Linq2Sql和Concat时有困难。在两个查询中填充所有属性就解决了这个问题,即使我使用了带有特定类型的select。您选择不同表的方式非常好!!谢谢
var fees = from ...
select new ChargeElementsNullable {
Prop1 = (some value),
Prop2 = (other value)
}
var ratestest = from ...
select new ChargeElementsNullable {
Prop1 = (some value),
Prop2 = (other value)
}
var bothtogether = fees.Concat(ratestest);