小编Jos*_*hua的帖子

LINQ中的LEFT OUTER JOIN

如何在不使用join-on-equals-into子句的情况下在C#LINQ中对对象执行左外连接?有没有办法用where条款做到这一点?正确的问题:对于内连接很容易,我有这样的解决方案

List<JoinPair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key
                             select new JoinPair { LeftId = l.Id, RightId = r.Id})
Run Code Online (Sandbox Code Playgroud)

但对于左外连接我需要一个解决方案.我是这样的,但它不起作用

List< JoinPair> leftFinal = (from l in lefts from r in rights
                             select new JoinPair { 
                                            LeftId = l.Id, 
                                            RightId = ((l.Key==r.Key) ? r.Id : 0
                                        })
Run Code Online (Sandbox Code Playgroud)

JoinPair是一个类:

public class JoinPair { long leftId; long rightId; }
Run Code Online (Sandbox Code Playgroud)

c# linq join

505
推荐指数
12
解决办法
64万
查看次数

MvcSiteMapProvider没有准备好页面渲染,缓存问题?

tl; dr: MvcSiteMapProvider的菜单有时无法在应用程序重新联机后呈现自身,即使代码运行并且菜单在页面刷新后呈现.

我在ASP.NET MVC 3项目中使用MvcSiteMapProvider,偶尔将应用程序从离线切换到在线(通过将App_Offline.htm文件插入服务器的根目录并将其删除),在刷新页面之前,菜单不会呈现任何内容.

我使用自定义DynamicNodeProvider从数据库中查询菜单项,然后呈现菜单.在调试时,我可以看到此代码确实在页面加载之前运行,但页面上没有呈现菜单.我将缓存设置为几个小时,并使用自定义缓存键以允许在某些操作后失效.

不幸的是,我不能让这个错误一致地重现.然而,如果我在DynamicNodeProvider的顶部添加一个睡眠,我可以让它更频繁地重现- 它会在60-70%的睡眠时间内失败大约60-70%.到目前为止,我最好的猜测是它与缓存机制有关,因为将缓存持续时间设置为0 似乎使得它没有问题,并且菜单总是弹出.但是,很难确定,因为这个问题很难确定.由于性能下降,将其保留为0将不是可接受的解决方案.

可能是这个问题的根本原因是什么?有没有人见过这种行为或有一个解决方法?

asp.net-mvc caching mvcsitemapprovider asp.net-mvc-sitemap

5
推荐指数
1
解决办法
513
查看次数