C# LINQ计数眼病
我正试图编写一个LINQ查询来计算一种类型的眼病的数量 大概是这样的:C# LINQ计数眼病,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我正试图编写一个LINQ查询来计算一种类型的眼病的数量 大概是这样的: var qry = from c in db.XBLRegionalContents where c.PublishDate <= DateTime.Today group c by c.ContentId into grouped select new FeaturedViewModel { XBLRegionalContent = db.XBLRegionalContents.Find(g
var qry = from c in db.XBLRegionalContents
where c.PublishDate <= DateTime.Today
group c by c.ContentId into grouped
select new FeaturedViewModel { XBLRegionalContent = db.XBLRegionalContents.Find(grouped.Key), RegionCount = grouped.Count() };
我认为你的问题在于你的Find声明。查找应该采用返回true或false的谓词。你只是在传递一个字符串,所以我猜这只是在你的收藏中循环每个项目
void Main()
{
var XBLRegionalContents = new List<XBLRegionalContent>(){
new XBLRegionalContent { contentID = "a", ID = "aa" },
new XBLRegionalContent { contentID = "b", ID = "bb" },
new XBLRegionalContent { contentID = "a", ID = "cc" },
new XBLRegionalContent { contentID = "d", ID = "dd" }
};
XBLRegionalContents.Dump();
var qry = from c in XBLRegionalContents
group c by c.contentID into grouped
select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() };
qry.Dump();
}
// Define other methods and classes here
public class XBLRegionalContent{
public string contentID {get;set;}
public string ID {get;set;}
}
我对您的示例代码做了一些修改,并用LinqPad制作了一个小示例来演示如何使用Find。您应该得到一个计数为2的contentID,而其他所有内容的计数都为1
Dump方法是特定于LinqPad的-它只打印出对象或集合的所有属性
void Main()
{
var XBLRegionalContents = new List<XBLRegionalContent>(){
new XBLRegionalContent { contentID = "a", ID = "aa" },
new XBLRegionalContent { contentID = "b", ID = "bb" },
new XBLRegionalContent { contentID = "a", ID = "cc" },
new XBLRegionalContent { contentID = "d", ID = "dd" }
};
XBLRegionalContents.Dump();
var qry = from c in XBLRegionalContents
group c by c.contentID into grouped
select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() };
qry.Dump();
}
// Define other methods and classes here
public class XBLRegionalContent{
public string contentID {get;set;}
public string ID {get;set;}
}
希望这有帮助。如果还有其他问题,请告诉我。祝你好运 我认为你的问题在于你的Find声明。查找应该采用返回true或false的谓词。你只是在传递一个字符串,所以我猜这只是在你的收藏中循环每个项目
void Main()
{
var XBLRegionalContents = new List<XBLRegionalContent>(){
new XBLRegionalContent { contentID = "a", ID = "aa" },
new XBLRegionalContent { contentID = "b", ID = "bb" },
new XBLRegionalContent { contentID = "a", ID = "cc" },
new XBLRegionalContent { contentID = "d", ID = "dd" }
};
XBLRegionalContents.Dump();
var qry = from c in XBLRegionalContents
group c by c.contentID into grouped
select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() };
qry.Dump();
}
// Define other methods and classes here
public class XBLRegionalContent{
public string contentID {get;set;}
public string ID {get;set;}
}
我对您的示例代码做了一些修改,并用LinqPad制作了一个小示例来演示如何使用Find。您应该得到一个计数为2的contentID,而其他所有内容的计数都为1
Dump方法是特定于LinqPad的-它只打印出对象或集合的所有属性
void Main()
{
var XBLRegionalContents = new List<XBLRegionalContent>(){
new XBLRegionalContent { contentID = "a", ID = "aa" },
new XBLRegionalContent { contentID = "b", ID = "bb" },
new XBLRegionalContent { contentID = "a", ID = "cc" },
new XBLRegionalContent { contentID = "d", ID = "dd" }
};
XBLRegionalContents.Dump();
var qry = from c in XBLRegionalContents
group c by c.contentID into grouped
select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() };
qry.Dump();
}
// Define other methods and classes here
public class XBLRegionalContent{
public string contentID {get;set;}
public string ID {get;set;}
}
希望这有帮助。如果还有其他问题,请告诉我。祝你好运 我做到了
这就是解决方案:
var qry = from c in db.XBLRegionalContents
where c.PublishDate <= DateTime.Today
group c by c.ContentId into grouped
select new FeaturedViewModel {
XBLRegionalContent = grouped.FirstOrDefault(x => x.ContentId == grouped.Key),
RegionCount = grouped.Count()
};
谢谢大家的帮助 我做到了
这就是解决方案:
var qry = from c in db.XBLRegionalContents
where c.PublishDate <= DateTime.Today
group c by c.ContentId into grouped
select new FeaturedViewModel {
XBLRegionalContent = grouped.FirstOrDefault(x => x.ContentId == grouped.Key),
RegionCount = grouped.Count()
};
谢谢大家的帮助 取而代之的是什么?每个区域内容都显示为count=1。我正在尝试按相同的ContentId对所有区域进行分组,并在显示对象本身时对其进行计数。如果跳过db.XBLRegionalContents.Findgrouped.Key并仅返回该键,则仍会获得相同的计数吗?在这种情况下,您应该验证数据。无效,因为grouped.Key是字符串,而不是XBLRegionalContent。无法转换。取而代之的是什么?每个区域内容的显示计数为1。我正在尝试按相同的ContentId对所有区域进行分组,并在显示对象本身时对其进行计数。如果跳过db.XBLRegionalContents.Findgrouped.Key并仅返回该键,则仍会获得相同的计数吗?在这种情况下,您应该验证数据。无效,因为grouped.Key是字符串,而不是XBLRegionalContent。无法转换。不工作,因为Find接收的是参数对象[],而不是lambda表达式。不管怎样,谢谢你的帮助。很抱歉没用。我没注意到你在用EF。XBLRegionalContent的主键是什么?它是ContentId和RegionId的多个PK。不起作用,因为Find接收的是params对象[],而不是lambda表达式。不管怎样,谢谢你的帮助。很抱歉没用。我没注意到你在用EF。XBLRegionalContent的主键是什么?它是ContentId和RegionId的多重PK。