C # LINQ Помощь с ошибками - PullRequest
       2

C # LINQ Помощь с ошибками

2 голосов
/ 24 января 2011

Ниже приведена выдержка из оператора LINQ, который выдает следующие ошибки.Есть ли способ ссылаться на идентификатор (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 ]

1 голос
/ 25 января 2011

Ваш «полный запрос» не может быть правильным, так как в нем есть несколько синтаксических ошибок и недостающие части.

Тем не менее, лучшее, что я могу восстановить, это:

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

Как этот запрос работает для вас?Это близко?

0 голосов
/ 25 января 2011

@ 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 () не имеет смысла).

Последний запрос также сбивает с толку.Выборка в первом запросе будет указывать, что он должен (если он работал) предоставить запрос, возвращающий два поля, а именно ID и Total.Он не возвращает ничего, называемого AgileFactorID или Name.

Я предполагаю из вопросов, что вы изучаете LINQ, поэтому вам могут пригодиться некоторые ресурсы, упомянутые в этом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...