我正试图解决如何在我的代码中使用LINQ的这一点。最终目标是输出总和(工作正常)以及与这些总和相关的人的姓名。
例如,如果Adam和Brad做了一笔交易,它应该输出如下内容:
Adam and Brad made $50 / £20 profit
所有这些信息都存储在数据库中的多个表中,并按伙伴关系ID进行分组。它看起来像这样:
var Profit = (from Yield in Total
join w in totalsDB.wager on Yield.wager_id equals w.id
join p in totalsDB.partnership on w.partnership_id equals p.id
join e1 in totalsDB.employees on p.employee1_id equals e1.id
join e2 in totalsDB.employees on p.employee2_id equals e2.id
group Yield by p.partnership_id into set
select new
{
Partnership = set.Key,
USD = set.Sum(s => (decimal)s.p_and_l / (decimal)s.exchange_usd),
GBP = set.Sum(s => (decimal)s.p_and_l / (decimal)s.exchange_gbp),
size = set.Sum(s => (decimal)s.size / (decimal)s.exchange_gbp),
Employee1 = set.Select(s => s.e1.name),
Employee2 = set.Select(s => s.e2.name)
}).ToList();
我有一种感觉,问题可能是我加入员工表两次的方式,或者可能是我试图选择它的方式。
然后我尝试以下列方式输出(尝试了两种方式,虽然他们“主要是”工作......员工的名字在踢我的牙齿:
foreach (var partnerYield in Profit)
{
string[] partYield = new string[] { "{0} and {1} made ${2:#,0} / £{3:#,0} profit", partnerYield.Employee1.ToString(), partnerYield.Employee2.ToString(), partnerYield.USD.ToString(), partnerYield.GBP.ToString() };
listview_partnerYield.Items.Add(partnerYield.Partnership.ToString()).SubItems.AddRange(partYield);
// OR
txt_partnerYield.Text += string.Format("{0} and {1} made ${1:#,0} / £{2:#,0} profit" + System.Environment.NewLine, partnerYield.Employee1, partnerYield.Employee2, partnerYield.USD, partnerYield.GBP);
}
就目前而言,它要么不在为员工ID返回空值,要么在text / list字段中输出system.anonymous类型。
非常感谢任何和所有帮助。
亲切的问候。
答案 0 :(得分:1)
由于每个合作伙伴都有两名员工,您可以使用First
方法选择返回Employee
,而不是使用返回Select
的{{1}}
IEnumerable<Employee>
这假设所有合伙企业都有匹配的员工。如果某些员工可能丢失,请将Employee1 = set.First(s => s.e1.name),
Employee2 = set.First(s => s.e2.name)
替换为First
。