【发布时间】:2021-05-20 04:00:58
【问题描述】:
我有两个元素列表,它们仅在 IsTemporalPaymentTerm 布尔字段上有所不同。
我想使用 LINQ 逐个比较这两个列表,并生成第三个列表,其中每个条目都有 IsTemporalPaymentTerm = true 的位置,如果没有则,那我想要IsTemporalPaymentTerm = false的那个。
这里有一些示例代码:
var allResults = db.PaymentTerms
.AsQueryable()
.Where(y => y.WorkDate == date
&& y.ProjectID == ProjectID
&& y.CompanyID == CompanyID
&& y.PayeeID == PayeeID);
//TABLE WITH ONLY TEMPORAL PAYMENT TERMS
var onlyTemporalResults = allResults.Where(x => x.IsTemporalPaymentTerm);
//TABLE WITH ONLY NON-TEMPORAL PAYMENT TERMS
var nonTemporalResults = allResults.Where(x => !x.IsTemporalPaymentTerm);
所以,基本上我想要的是将 onlyTemporalResults 与 nonTemporalResults 进行比较,并获得一个包含临时付款期限或非临时付款期限的最终列表如果找不到临时付款期限。
伪代码示例:
List<PaymentTerms> TemporalPaymentTerms = new List<PaymentTerms>();
PaymentTerm unnaprovedPT1 = new PaymentTerm { PayeeID = 1, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = false };
PaymentTerm unnaprovedPT2 = new PaymentTerm { PayeeID = 2, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = false };
TemporalPaymentTerms.Add(unnaprovedPT1);
TemporalPaymentTerms.Add(unnaprovedPT2);
List<PaymentTerms> NonTemporalPaymentTerms = new List<PaymentTerms>();
PaymentTerm approvedPT1 = new PaymentTerm { PayeeID = 2, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = true};
PaymentTerm approvedPT1 = new PaymentTerm { PayeeID = 3, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = true};
//LINQ query that merges both lists goes here.
//FINAL EXPECTED RESULT:
List<PaymentTerms> FinalList = [
{PayeeID = 1, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = false},
{PayeeID = 2, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = false},
{PayeeID = 3, CompanyID = 2, ProjectID = 3, IsTemporalPaymentTerm = true}
];
我知道这可以遍历两个列表(临时和非临时付款条款),然后比较它们,但我想我的问题是:
这是否可以使用单个 LINQ 查询更高效、更优雅地完成?也许我缺少某种形式的加入?条件 Where 子句?
到目前为止,我还没有看到答案。提前致谢!
【问题讨论】:
-
那是很多散文。你能提供一些代码吗?也许你正在使用的类?
-
@Llama 我在下面添加了一些带有简短描述的示例代码,我认为这会使事情更加清晰。
-
@Llama 还压缩了文本以使问题不那么冗长。
-
这是一个很大的进步! :) 不幸的是我不知道答案,但希望现在您的问题更容易消化,有人能够更轻松地提供答案。
标签: c# .net performance entity-framework linq