2012-01-17 2 views
2

유형의 개수를 세는 LINQ 쿼리를 작성하려고합니다. 이 같은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() }; 

하지만 뭔가 옳지 않다. db에 얼마나 많은 영역이 있는지 계산하여 XBLRegionalContents 개체를 표시하려고합니다.

누군가 나를 도울 수 있습니까?

감사합니다.

UPDATE 여기

내가 문제가 Find 문으로 생각 XBLRegionalContent

public class XBLRegionalContent 
{ 
    [Key, Column(Order = 0)] 
    public string ContentId { get; set; } 
    [ForeignKey("ContentId")] 
    public virtual XBLContent Content { get; set; } 

    [Key, Column(Order = 1)] 
    public string RegionId { get; set; } 
    [ForeignKey("RegionId")] 
    public virtual XBLRegion Region { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 
} 
+0

대신 무엇을 얻고 있습니까? –

+0

각 지역 컨텐츠는 count = 1로 표시됩니다. 모든 컨텐츠를 동일한 ContentId로 그룹화하고 오브젝트를 직접 보여 주려고합니다. – programad

+0

'db.XBLRegionalContents.Find (grouped.Key)'를 건너 뛰고 키만 반환하면 여전히 같은 수를 얻나요? (해야합니다)이 경우 귀하의 데이터를 검증해야합니다. – Magnus

답변

0

내가 해냈어!

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() 
    }; 

덕분에 모두 도움을 :

이 솔루션입니다!

0

코드입니다. Find()은 참 또는 거짓을 리턴하는 술어를 취해야합니다. 방금 문자열을 전달하는 중이므로 컬렉션의 각 항목을 반복하는 것입니다.

나는 샘플 코드로 몇 가지 자유를 모았고 LinqPad로 작은 예제를 조합하여 Find를 사용하여 시연했다. contentID가 2이고 개수가 1 인 contentID를 가져야합니다.

(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;} 
} 

희망이 있습니다. 다른 질문이 있으면 알려주십시오. 행운을 빕니다!

+0

이 작동하지 않습니다. 애니와, 도와 줘서 고마워. – programad

+0

죄송합니다. 도움이되지 않았습니다. 네가 EF를 쓰고 있다는 걸 몰랐어. XBLRegionalContent의 기본 키는 무엇입니까? –

+0

"ContentId"및 "RegionId"의 다중 PK입니다. – programad