C#LINQ帮助解决错误

时间:2011-01-24 19:01:06

标签: c# .net linq linq-to-sql

以下是LINQ语句的摘录,它引发了以下错误。有没有办法像我在下面那样引用ID(ID = af.AgileFactorID)?.... psf.AgileFactorID == tagSummary.ID?在此先感谢您的帮助!

select new {
    ID = af.AgileFactorID,
    Total = psf.Count()
};

1)当前上下文中不存在名称af,2)当前上下文中不存在名称psf

var tagCloud = from psf in tagSummary where psf.AgileFactorID == tagSummary.ID

1)错误62'AnonymousType#1'不包含'AgileFactorID'的定义,并且没有扩展方法'AgileFactorID'可以找到类型'AnonymousType#1'的第一个参数(你是否缺少using指令或汇编参考?)

2)错误63'System.Collections.Generic.IEnumerable'不包含'ID'的定义,并且没有扩展方法'ID'接受类型'System.Collections.Generic.IEnumerable'的第一个参数可以找到(您是否缺少using指令或程序集引用?)

以下是完整查询:

private void BindTagCloud()
{



var tagSummary = from af in db.AgileFactors
           join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
           join s in db.Stories on psf.StoryID equals psf.StoryID
           join pim in db.ProjectIterationMembers on pim.ProjectIterationMemberID equals s.ProjectIterationMemberID
           join i db.Iteration on ...
           join p db.Project on ....
           where p.ProjectID == proj_id &&
                 p.ProjectID == i.ProjectID &&
                 i.ProjectIterationID == pim.ProjectIterationID &&
                 pim.ProjectIterationMemberID == s.ProjectIterationMemberID &&
                 s.StoryID == psf.StoryID &&
                 psf.AgileFactorID == af.AgileFactorID
                 group af by af.Name into tagGroup

                 select new
                 {

                    ID = af.AgileFactorID,
                    Total = psf.Count() 

                 };


 var tagCloud = from psf in tagSummary
         where psf.AgileFactorID == tagSummary.ID
 select new
 {

 Name = psf.Name,
 ID = psf.AgileFactionID,
 Count = psf.Count(),

 weight = Count / tagSummary.Total * 100

};


ListView1.DataSource = tagCloud; 
ListView1.DataBind();

}

2 个答案:

答案 0 :(得分:1)

您的“完整查询”无法正确,因为它有许多语法错误和缺少部分。

尽管如此,我能够重建它的最好方法是:

var tagSummary =
    from af in db.AgileFactors
    join psf in db.ProjectStoryFactors
        on af.AgileFactorID equals psf.AgileFactorID
    join s in db.Stories on psf.StoryID equals s.StoryID
    join pim in db.ProjectIterationMembers
        on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
    join i in db.Iteration
        on pim.ProjectIterationID equals i.ProjectIterationID
    join p in db.Project on i.ProjectID equals p.ProjectID
    where p.ProjectID == proj_id
    group af by new { af.Name, af.AgileFactorID } into tagGroup
    select new
    {
        ID = tagGroup.Key.AgileFactorID,
        Name = tagGroup.Key.Name,
        Count = tagGroup.Count()
    };


var tagCloud =
    from t in tagSummary
    join psf in db.ProjectStoryFactors
        on t.ID equals psf.AgileFactorID into psfs
    let Count = psfs.Count()
    let Total = tagSummary.Count()
    select new
    {
        t.Name,
        t.ID,
        Count,
        Weight = (double)Count / Total * 100,
    };

此查询如何为您服务?它接近吗?

答案 1 :(得分:0)

@MiziaQ,

我怀疑缺乏答案可能是因为没有人知道从哪里开始。这似乎有很多错误,我几乎不知道从哪里开始。我也不知道你想要达到的目的。

但是一些明显的错误

如果您没有该部分,您在查询中引用af.AgileFactorID的尝试将起作用

 group af by af.Name into tagGroup

然而,群组功能意味着不再可用。如果您需要访问AgileFactorID,您是否需要通过

将其包含在分组中
group af by new { af.Name, af.AgileFactorID} into tagGroup

这应该允许您访问AgileFactorID的值,但只能通过引用它来像

select new { AgileFactorID = tagGroup.Key.AgileFactorID} 

同样,由于分组,psf不再在范围内。 (这也忽略了psf.Count()没有意义的事实。)

最终查询也令人困惑。第一个查询上的select表示它应该(如果有效)提供一个返回两个字段即ID和Total的查询。它不会返回任何名为AgileFactorID或Name的内容。

我从问题中假设你正在学习LINQ,所以你可能会发现this问题中提到的一些资源很有帮助。