如何使用XPO为一个特定行进行自由(非关联)连接?

时间:2013-06-21 14:05:58

标签: c# linq devexpress xpo

假设我有一个名为DailyVisitorSummary的pesistent类,它描述了每个网页每天有多少访问者。对于simplicitzy,假设我们将日表示为纯整数。

现在,我想创建一个查询来检索特定日期数据,以及上一天和下一天的数据。我所知道的是,同一个网页肯定最多只有前一天和第二天的数据记录,所以我可以写一个SQL查询(MySQL语法),如:

SELECT c.*,p.*,n.* from DailyVisitorSummary c
LEFT JOIN DailyVisitorSummary p ON p.WebPage = c.WebPage AND p.Day = c.Day - 1
LEFT JOIN DailyVisitorSummary n ON n.WebPage = c.WebPage AND n.Day = c.Day + 1
WHERE c.Day = 453;

我想用以下结果填充以下viewmodel:

public class VMDailyVisitors3Day {
   public VMDailyVisitors CurrentDay { get; set; }
   public VMDailyVisitors PreviousDay { get; set; }
   public VMDailyVisitors NextDay { get; set; }
}

public class VMDailyVisitors {
    public int Day { get; set;; }
    public int WebPageID { get; set; }
    public int VisitorCount { get; set; }
}

我如何使用Linq到XPO进行此查询? 我需要一个LINQ解决方案,因为我需要在服务器模式MVC GridView中使用结果。

2 个答案:

答案 0 :(得分:1)

Linq to XPO仅支持群组加入。一种可能的解决方案是在数据库中创建一个SQL视图,并使用您的SQL查询用数据填充它。然后,您可以将另一个持久类映射到此视图以获取数据。

视图必须至少有一列具有唯一值。不要使用newid函数或类似函数来生成唯一值,因为每次查询数据时,此方法都会为同一行分配不同的值。服务器模式使用键列来标识行。使用实际数据填充键列。例如,连接WebPage和Day列的值。但要确保这会产生不同的值。

答案 1 :(得分:1)

我已经在DX支持的帮助下找到了一个解决方法,使用PersistentAliasAttribute作为中间步骤,我可以在其中进行免费连接,然后在XPQuery中使用该属性。如果有人有兴趣,check out here