Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ计数眼病_C#_.net_Linq_Entity Framework - Fatal编程技术网

C# 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

我正试图编写一个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(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。