C# Linq2sql计数分组投票实体查询问题,分组后无法获取属性?
我正在构建一个音乐投票应用程序,类似于stack overflow 我有3张表格,图表,图表项目,投票 我试图带回一个图表项目列表,它链接到一个图表,每个图表项目的投票数都已计算在内 这就是我目前正在尝试的C# Linq2sql计数分组投票实体查询问题,分组后无法获取属性?,c#,asp.net,asp.net-mvc,linq-to-sql,vote,C#,Asp.net,Asp.net Mvc,Linq To Sql,Vote,我正在构建一个音乐投票应用程序,类似于stack overflow 我有3张表格,图表,图表项目,投票 我试图带回一个图表项目列表,它链接到一个图表,每个图表项目的投票数都已计算在内 这就是我目前正在尝试的 var firstList = from chartItem in db.ChartItems join vote in db.Votes on chartItem.ixChartId equals vote.ixChartId into j1
var firstList = from chartItem in db.ChartItems
join vote in db.Votes on chartItem.ixChartId equals vote.ixChartId into j1
where chartItem.ixChartId == id
from j2 in j1.DefaultIfEmpty()
group j2 by chartItem.ixChartItemId into grouped
select new ChartItemWithVotes
{
totalVotes = grouped.Count(t => t.ixVoteId != null),
//CANT GET OTHER PROPS HERE
};
问题是,一旦执行了分组,就无法从连接中获得填充模型所需的任何其他属性。例如,每个图表项都应该有标题、id等
我已经创建了一个ViewModel来保存我需要的所有属性,名为ChartItemWithVotesincludes all entity Value+int totalVotes
谁能帮我找出哪里出了问题
最后,我在寻找这个
图表名称
投票人姓名
20-ChartItemname
15-ChartItemname
12-ChartITemName我认为您可能需要创建一个查询,生成chartItemId和总投票数,并根据该查询从db.ChartItems中选择所有图表项。否则它可能很快就不可读了。这样做也不会影响性能。linq中的延迟执行应该确保db只接受一次命中 您的设计似乎有缺陷,因为您的投票表有一个Chart table外键,而它应该指向ChartItem表。那么我的建议就更有意义了,你可以用一个常规的GroupBy子句来解决所有问题 它应该类似于图表->图表项->投票 看起来您当前的设计更像是ChartItem投票 这种方法怎么样:
var result = db.Votes
.Where(v => v.chartItemId != null)
.GroupBy(v => v.chartItemId)
.Join(db.ChartItems, v => v.Key, c => c.chartItemId, (v, c) => new {Votes = v.Count(), c.Title, c.Id});
这可能不是您要寻找的答案,但如果在SQL server中设置了适当的关系,因此已导入到DBML中,您应该能够执行以下操作:
var chartvotes = from chartItem in db.ChartItems
select new {
ChartItem = chartItem,
TotalVotes = chartItem.Votes.Count()
};
嵌套linq查询它们工作得很好,我在我的应用程序中使用了它们,因为在主查询中没有使用任何与投票表直接相关的where子句,所以应该可以正常工作
var firstList = from chartItem in db.ChartItems
where chartItem.ixChartId == id
select new ChartItemWithVotes
{
chartItemName = chartItem.asName,
totalVotes = (from votes in db.Votes
where vote.ixChart == chartItem.ixChart
select vote.ixVoteId).Count()
};
但是如果我选择了所有的图表项目,我会不会失去我刚刚统计的选票?如何组合两个查询的结果?如果您的表关系正确,单次查询就足够了。我的投票具有chart和chartitem外键,因为我希望能够对图表和图表项进行投票?我投票总是有一个chartId,如果它没有chartItem id,那么我知道这是对图表本身的投票。我认为它应该编译并运行正常,但我还没有triedOk,是的,它正在工作。与手工编写sql相比,使用它是否存在任何性能问题?LINQtoSQL旨在生成最佳sql,因此您不应该受到任何性能影响。