首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于日期的C# Linq加权平均值

基于日期的C# Linq加权平均值
EN

Stack Overflow用户
提问于 2010-10-27 11:58:13
回答 1查看 1.1K关注 0票数 4

我已经找到了几篇详细介绍如何基于外键执行加权平均的帖子,但我还没有找到一个适合我的情况的解决方案。这就是它:

我有两个表,一个表A和一个表B,多对多表将它们链接在一起;没有什么复杂的:

代码语言:javascript
复制
TableA
{
     A_ID,
     Other stuff
}

TableB
{
     B_ID,
     Date
     Other stuff
}

LinkAtoB
{
     A_ID,
     B_ID
}

现在来看数学部分。我或多或少地尝试根据表B中最近的关联数量来加权来自TableA的结果。

因此,如果TableA在表中有4个具有以下日期的关联:

代码语言:javascript
复制
{10/23/2010, //3 days ago
10/19/2010,  //5 days ago
10/18/2010,  //6 days ago
9/13/2010}   //40ish days ago

因此,以下是我想给它们排名的方式:

我想提供一个以天为单位的新近阈值,我将以7天为例:

因此,使用上面的数据,我将分配以下值:

代码语言:javascript
复制
{10/23/2010, //7-3 = 4
10/19/2010,  //7-5 = 2
10/18/2010,  //7-6 = 1
9/13/2010}   //40ish days ago

因此,该特定TableA条目的加权平均值为7/3= 2.33333。

以下是我到目前为止所掌握的大致情况:

代码语言:javascript
复制
var k = from a in TableA
        group a by a.Select(x=>x.LinkAtoB.TableB)
                    .Where(x=>x.Date.CompareTo(DateTime.Now.AddDays(-7)) >= 0)
                    into g
        select g.Sum(x => DateTime.Now.Subtract(x.Date).Days) / 
        g.Sum(x => x.Length);

我想我接近了,但我知道我把小组的部分搞错了。我想其他的东西应该可以用。我如何修复我的代码来完成我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-27 15:14:46

给你!:)

代码语言:javascript
复制
var k = (from b in TableB
        join bb in LinkAtoB on b.B_ID equals bb.B_ID into b_join
        from ab in b_join.DefaultIfEmpty()
        where b.B_DATE.CompareTo(DateTime.Now.AddDays(-7)) > 0
        select new {ab.A_ID, DaysAgo = (DateTime.Now - b.B_DATE).Days} into xx
        group xx by xx.A_ID into yy
        select new {yy.Key, Weighted = yy.Sum(x=> 7 - x.DaysAgo) / yy.Count()} into zz
        join a in TableA on zz.Key equals a.A_ID
        select new {a.A_ID, a.A_Other_Stuff, zz.Weighted}).ToList();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4029857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档