كيف يمكنني الحصول على مجموع في هذا الاستعلام ينق؟

StackOverflow https://stackoverflow.com/questions/676290

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي جدول يحتوي على صفر إلى العديد من الأطفال. تماما مثل كيف أن هذا الموقع يحتوي على QUESTION التي يمكن أن يكون صفر إلى العديد VOTES (إما لأعلى أو لأسفل == 1 == 0).

ولست بحاجة للحصول <م> جميع الأسئلة التي لديها أكثر من الاصوات . على سبيل المثال. جميع الأسئلة، بأمر من مجموع (صوت) الهابطة.

ولست متأكدا من كيفية القيام بذلك في LINQ.

وهكذا كنت أود أن يكون يسمى EntitySet أسئلة ودعا EntitySet آخر الأصوات.

وكنت أحاول القيام به مجموعة من والسماح والنظام من قبل وليس هناك ما يجمع: (

ويمكن لأي شخص لديه أي اقتراحات، من فضلك؟

هل كانت مفيدة؟

المحلول

myDataContext.Questions
  .OrderByDescending(q => q.Votes.Select(v => v.VoteValue).Sum())

في الفهم الاستعلام (لحالها):

from q in myDataContext.Questions
order q by 
(
  from v in q.Votes
  select v.VoteValue
).Sum() descending
select q;

نصائح أخرى

وهذا يعتمد في الغالب على البيانات الخاصة بك ولكن هنا عينة صغيرة:

XElement xdoc=XElement.Parse(@"
  <root>
    <question name=""A"">
      <vote type=""up"" />
      <vote type=""down"" />
    </question>
    <question name=""B"">
      <vote type=""up"" />
      <vote type=""up"" />
    </question>
    <question name=""C"" />
  </root>
  ");

var result=
  from q in xdoc.Elements("question")
  let votes=q.Elements("vote").Count(v=>v.Attribute("type").Value=="up")
  orderby votes descending
  select new
  {
    Name=q.Attribute("name").Value,
    Votes=votes
  };

foreach (var r in result)
{
  Console.WriteLine(r.Name+" "+r.Votes);
}

ومنذ كنت تستخدم EntitySet I تجمعها هو مصمم الرسم Linq2SQL؟ بفرض أن لديك ما يشير إعداد بشكل صحيح وتحتوي على خاصية Vote.Question:

(from v in dc.Votes
where v.IsUpVote // v.Vote == 1 (??)
group v by v.Question into q
select new { Question = q.Key, UpVotes = q.Count() }).OrderByDescending(e => e.UpVotes);

وأنا هنا جمع عدد () هو في الواقع ما تريد؟ سيكون مبلغ () إنتاج نفسه، ولكن ربما لا meaningfull باسم (؟)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top