以下代码有效,但它不是一个很好的代码。 (低绩效)
我有一本有价值和关键字的字典。
首先,我要通过存在的每个网络摄像头。然后我加载列表中的所有参与者(其中webcode等于foreach中的实际网络编码)。之后,我将数据(网络摄像头的参数和参与者的数量添加到字典中)。
Guid compID = Guid.Parse(wID);
ChartModel webcodes = new ChartModel();
webcodes.Title = "Webcodes Statistics";
webcodes.Data = new Dictionary<string, int>();
var webcodesData = db.t_Webcode;
foreach (var w in webcodesData)
{
var wData = db.t_Participant.Where(t => t.FK_Competition == compID && t.Webcode == w.Webcode);
if (wData.Count() != 0)
webcodes.Data.Add(w.Parameter, wData.Count());
}
ViewBag.Webcodes = webcodes;
TIA
答案 0 :(得分:0)
你需要这些内容:
webcodes.Data = (from w in db.t_Webcode
join p in db.t_Participant on w.Webcode equals p.Webcode
where p.FK_Competition == compID
group w by w.Parameter into g
select new { g.Key, Count = g.Count() }).ToDictionary();
我无法测试它,但这是您需要的查询类型。
答案 1 :(得分:0)
这将假设您在数据库中定义了关系,并且您的LINQ to SQL datacontext知道它们。如果没有,您将需要从tWebcode手动加入t_Participants。
这应该在1个单独的SQL查询中执行,而不是在tWebcode中每行执行1次查询。
var webcodesAndNoOfParticipants =
from webcode in db.tWebcode
// Define number of participants for this webcode
let numberOfParticipants = webcode.t_Participants.Count(participant => participant.FK_Competition == compID)
where numberOfParticipants > 0
select new {
WebcodeParameter = webcode.Parameter,
NoOfParticipants = numberOfParticipants
};
webcodes.Data = webcodesAndNoOfParticipants.ToDictionary(x => x.WebcodeParameter, x => x.NoOfParticipants);