C# SELECTLINQ中的子查询
我的问题如下C# SELECTLINQ中的子查询,c#,asp.net,linq,C#,Asp.net,Linq,我的问题如下 var result = from cr in cumulativeresult orderby cr.Days select new { Days = cr.Days, Com = (from cr1 in cumulativeresult where cr1.Days < cr.Days group cr1 by 1 into cr1grp se
var result = from cr in cumulativeresult
orderby cr.Days
select new
{
Days = cr.Days,
Com = (from cr1 in cumulativeresult
where cr1.Days < cr.Days
group cr1 by 1 into cr1grp
select
new
{
Count = cr1grp.Count() + cr.Com
}),
ComPercent = Math.Round((double.Parse((
from cr1 in cumulativeresult
where cr1.Days < cr.Days
group cr1 by 1 into cr1grp
select cr1grp.Count() + cr.Com).ToString()) / ComCount) * 100, 2)
};
我不想对我的foreach循环进行任何处理,我想要linq查询本身中的值。要回答您的问题,您需要选择
。首先,您(而不是linq)知道的是一组1
我还以其他几种方式调整了您的查询:
为了获得一些输出,我不得不更改编译器,因为返回类型仍然是IEnumerable
(或IQueryable
)。这可以通过使用First()
或Single()
(或相应的.OrDefault()
版本)来解决,但是,更常见的是只使用Count()
而不分组,例如:
Com = (from cr1 in cumulativeresult
where cr1.Days < cr.Days
select cr1
).Count() + cr.Com,
你所说的“不以数字形式出现”是什么意思?你正在使用toString()我希望输出中的值,当前它以类型出现是的,你没有正确地访问你的输出“我不想在我的foreach循环中进行任何处理”,什么处理?你需要重复你的工作result@Hitesh如前所述,Com
可能包含多个“计数”,您希望它们如何显示在列中??调用.Count()比使用“group”子句然后调用.Single()容易得多。生成的T-SQL语句也更简单。谢谢你的提示!
var cumulativeresult = new[] { new { Days = 0, Com = 0 }, new { Days = 1, Com = 1 } };
var ComCount = cumulativeresult.Count();
var result = from cr in cumulativeresult
orderby cr.Days
select new
{
Days = cr.Days,
Com = (from cr1 in cumulativeresult
where cr1.Days <= cr.Days
group cr1 by 1 into cr1grp
select
new
{
Count = cr1grp.Count() + cr.Com
}
).First().Count,
ComPercent = Math.Round((//double.Parse(
((double)(
from cr1 in cumulativeresult
where cr1.Days <= cr.Days
group cr1 by 1 into cr1grp
select cr1grp.Count() + cr.Com).First())//.ToString())
/ ComCount) * 100, 2
)
};
var dt = new DataTable();
dt.Columns.AddRange(new[] {new DataColumn("Days"),new DataColumn("Com"),new DataColumn("ComPercent") });
foreach (var item in result)
{
dt.Rows.Add(item.Days, item.Com, item.ComPercent);
}
dt.Dump();
Com = (from cr1 in cumulativeresult
where cr1.Days < cr.Days
select cr1
).Count() + cr.Com,
var result = from cr in cumulativeresult
let totalCount =
(from cr1 in cumulativeresult
where cr1.Days < cr.Days
select cr1
).Count() + cr.Com
orderby cr.Days
select new
{
Days = cr.Days,
Com = totalCount,
ComPercent = Math.Round((double)totalCount / ComCount * 100, 2)
};