小编Con*_*ell的帖子

从列表中选择Lambda或linq

我试图根据该集合的对象上的id从linq中的集合中进行选择.

List<List<myobject>> master = new List<List<myobject>>();
List<myobject> m1 = new List<myobject>();
List<myobject> m2 = new List<myobject>();


master.Add(m1);
master.Add(m2);
m1.Add(new myobject{name="n1",id=1});
m1.Add(new myobject{name="n2",id=2});
m1.Add(new myobject{name="n3",id=3});

m2.Add(new myobject{name="m1",id=1});
m2.Add(new myobject{name="m2",id=2});
m2.Add(new myobject{name="m3",id=3});
Run Code Online (Sandbox Code Playgroud)

我想要的是,使用lambda/linq,是从主服务器获取id = 2的所有对象.

使用它的senario是一个具有这种结构的mongodb.

谢谢,

c# linq lambda mongodb

10
推荐指数
1
解决办法
4万
查看次数

方法链的最佳实践("返回此")

我有一个名为的抽象类DatabaseRow,在派生和构造之后,主要从一个Load(object id)方法加载.

我有很多代码创建类的新实例,从ID加载它,然后返回类.我想将这段代码简化为一行代码(只是为了整洁,有很多类只有返回这些Loaded实例的属性列表).

有两种方法我可以想到这样做,但对我来说似乎都不对.

1.我可以return this;在我的最终Load方法和用途return new Derived().Load(id);

2.我可以创建一个通用方法来返回一个加载的方法.

public static T LoadRow<T>(object id) where T : DatabaseRow, new()
{
    T row = new T();
    row.Load(id);
    return row;
}
Run Code Online (Sandbox Code Playgroud)

我已经看到一些其他代码使用与1号相同的方法,但我从未见过任何有经验的开发人员推荐它,也没有遇到过.NET框架中做同样事情的任何方法,所以也许这不是最好的做法?

有没有人知道任何其他可能比这两种解决方案更好的解决方案?

解:

在阅读了SirViver的回答和评论之后,我意识到所有返回的属性都需要被缓存.解决方案有点不同,但类似于选项2(我不希望任何人提出这个答案,因为我没有解释这部分设计)

所有这些实例都将从数据库中另一列检索的值(如果您愿意,数据库关系)中加载.我没有尝试从这个值加载新实例,而是创建了一个从列名加载实例并将加载的值缓存到Dictionary中的方法.这很好用,因为这是DatabaseRow该类的主要功能之一.

    private Dictionary<string, DatabaseRow> linkedRows;

    protected T GetLinkedRow<T>(string key) where T : DatabaseRow, new()
    {
        if (linkedRows.ContainsKey(key)) return (T)linkedRows[key];
        else
        {
            T row = new T();
            row.Load(this[key]);
            linkedRows.Add(key, row);
            return …
Run Code Online (Sandbox Code Playgroud)

.net c# return-value

8
推荐指数
1
解决办法
4310
查看次数

JQuery .text()不能使用indexOf来查找空格

这是一个奇怪的.

我有一个列表项,包含文本'2011年5月13日'.我有很多这些日期,我想使用JQuery通过自由文本输入搜索它们(它们并不总是日期),但如果我在搜索框中放置一个空格,我似乎无法搜索任何内容.

然而,

li.text() // 13 May 2011
li.text().indexOf('13') // 0
li.text().indexOf('13 ') // -1
li.text().indexOf(' ') // -1
'13 May 2011'.indexOf('13') // 0
'13 May 2011'.indexOf('13 ') // 0
li.text() == '13 May 2011' // false
Run Code Online (Sandbox Code Playgroud)

我已将我的返回文本粘贴到文本到十六进制转换器中,并且空格字符是'20'(十进制32,这是ASCII中的空格),所以它不是一个有趣的空格字符.

以前有人遇到过这个问题吗?有没有人有任何其他想法?

javascript jquery

7
推荐指数
1
解决办法
4092
查看次数

缓存与Scripts.Render破坏,但没有捆绑URL

当使用Bundle并将EnableOptimisations设置为true时,输出URL包含一个哈希值,以防止浏览器在缓存中从缓存中加载文件(如果已更改).

@Scripts.Render("~/content/js/global")
Run Code Online (Sandbox Code Playgroud)

输出:

<script src="/content/js/global?v=PqstRRGF8qsUsJfHu6NBBBp6eDxYBz1JCbHY6CQJVks3"></script>
Run Code Online (Sandbox Code Playgroud)

但是,我们的应用程序中的某些文件特定于一个页面.我们直接引用这些:

@Scripts.Render("~/areas/areaname/content/js/page-name.js")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出URL没有哈希值,因此被缓存,当我们发布对这些文件的更改时会导致问题.

我们宁愿不单独更改每个引用,也不必每次更改文件时手动更改URL.

如何全局地向所有捆绑的脚本和样式URL添加哈希(或版本号)?

asp.net-mvc caching bundling-and-minification

7
推荐指数
1
解决办法
4108
查看次数

服务器端和客户端方法

我在C#2.0中使用ASP.NET.我为数据库创建了一些对象,这些对象中的每一个都具有可以本地调用的属性,或者以类似的方式调用,并从中创建RESTful JSON API.

我有很多类似标签的东西,我喜欢在这个网站上称为"模块" - 模块的功能是将数据转换为HTML以显示在页面上.理想情况下,需要在服务器端C#代码中加载第一个选项卡,然后在单击选项卡时使用Ajax加载其他选项卡,但对于旧浏览器和搜索引擎,选项卡仍然是一个链接,将加载相同的HTML代码服务器端.

目前我将JavaScript代码与将每个模块转换为HTML的C#代码完全分开编写,但该方法实际上是相同的,只是一种不同的语言.与此示例类似.

C#代码

public override string GetHtml()
{
    IJsonObjectCollection<Person> response = ((Village)page).People;
    string html = "<div id=\"test\">";
    foreach (Person person in response)
    {
        html += "<div class=\"person\">";
        html += person.Name;
        if(canEdit) html += "*";
        html += "</div>";
    }
    return html + "</div>";
}
Run Code Online (Sandbox Code Playgroud)

JavaScript代码

function getHtml() {
    JsonRequest('/json/villages/1/people', function(response) {
        var html = '<div id="test">';
        for (int i = 0; i < response.length; i++)
        {
            var person = response[i];
            html += '<div class="person">';
            html …
Run Code Online (Sandbox Code Playgroud)

.net javascript c# ajax json

6
推荐指数
1
解决办法
1299
查看次数

可选参数和继承

我理解可选参数,我非常喜欢它们,但我想更多地了解如何使用继承接口.

图表A.

interface IMyInterface
{
    string Get();
    string Get(string str);
}

class MyClass : IMyInterface
{
    public string Get(string str = null)
    {
        return str;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我会认为该Get方法MyClass继承了两个接口的方法,但是......

'MyClass'没有实现接口成员'MyInterface.Get()'

有这么好的理由吗?

也许我应该通过在您说的界面中添加可选参数来解决这个问题?但是这个怎么样?

图表B

interface IMyInterface
{
    string Get(string str= "Default");
}

class MyClass : IMyInterface
{
    public string Get(string str = "A different string!")
    {
        return str;
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码编译得很好.但那肯定不是正确的吗?然后再挖掘一下,我发现了这个:

  IMyInterface obj = new MyClass();
  Console.WriteLine(obj.Get()); // writes "Default"

  MyClass cls = new MyClass();
  Console.WriteLine(cls.Get()); // writes …
Run Code Online (Sandbox Code Playgroud)

c# inheritance optional-parameters

6
推荐指数
1
解决办法
1670
查看次数

Chrome中的jQuery事件调试

我们有一个非常JS的密集型Web应用程序,主要基于jQuery的live绑定(事实上我们在jQuery v1.7之前就开始实现这一点).

Chrome的内置开发工具很棒,但是有一个问题一直存在,我总是发现它几乎不可能用它们调试:有时我的live处理程序没有被调用,因为早期的处理程序停止事件冒泡.

有什么方法可以告诉Chrome(或者确实是Firebug或其他扩展程序或书签(最好是免费的!))来破坏jQuery库代码之外的下一个事件处理程序.这样我只需点击按钮,看看哪个事件发射,一步一步看看我何时意外停止传播?

如果没有,有什么理由不是吗?可以这样做吗?

debugging jquery google-chrome

6
推荐指数
2
解决办法
1万
查看次数

每个连接的MVC 4 IIS内存泄漏

我有一个AsyncController设置来执行长轮询操作.这一切都运行正常,但是一位同事注意到服务器上的内存泄漏似乎随着每个新连接而增加.

我已经创建了一个小应用程序,可以从这个页面请求数千次,我正在监视IIS进程的内存使用情况.每个连接都会增加内存使用量,但在客户端断开连接时不会一直下​​降.

经过进一步的调查,我发现即使我AsyncController用一个Controller除了这个之外什么都不做的标准替换我,这仍然会发生:

public class WaitController : Controller
{
    public JsonResult Member(string oauth_token, int service_id, bool busy = false)
    {
        return Json(new
        {
            ready = false,
        }, JsonRequestBehavior.AllowGet);
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然在这方面,没有那么多的内存使用,但行为似乎完全相同.

我已经运行了一个内存分析器来显示10,000个连接之间的区别,那里几乎没有任何东西.大多数内存都是ExpiresEntry[]System.Web.Caching或者实例占用的System.Runtime.Caching,但是与我在IIS工作进程中获得的内存增加相比,这些内存总数为空.

我的问题是,IIS是通过设计做到这一点的吗?也许这已被分配给连接线程,这些线程只是在以后需要它们时才会被挂起?这是IIS,ASP.NET还是MVC 4的错误?

我决定使用MVC 4的WebAPI功能,因为我们希望它具有灵活性,可维护性,面向未来并可通过AJAX访问.从开发的角度来看,它似乎也有意义,因为我们也在MVC 4中构建了网站.

但是,一位同事现在将此作为系统架构的一个关键问题提出,因为我们将来(将来)需要连接数千个客户端.他建议我们改用WCF.所以,奖金问题 - 将使用WCF解决这些问题?

c# asp.net iis-7 asp.net-mvc-4

6
推荐指数
1
解决办法
3335
查看次数

从控制器操作手动捆绑和缩小JS

我喜欢ASP.NET MVC 4.5中的Bundling和Minification,并且使用它很多.

但是,一个小问题是我们的"插件"托管在一个无Cookie域上,该域位于我的Visual Studio解决方案中的一个单独项目中.

我正在寻找一种解决方案,它允许我们的主站点请求捆绑和缩小的JS文件,其中包含来自cookieless站点的任意数量的插件.就像是:

http://my.cookieless.domain/plugins.js?include=alpha&include=bravo,charlie
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能找到的最佳解决方案是使用第三方捆绑和缩小库,考虑到ASP.NET内置了一个库,这看起来有些过分.

是否可以从内部控制器操作中手动调用ASP.NET捆绑/缩小过程?

public JavaScriptResult Index(IList<string> include)
{
    //bundle and minify JS
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc bundling-and-minification

6
推荐指数
1
解决办法
1485
查看次数

从ASP.NET WebForms迁移到MVC

我已经阅读了大量的问题和文章,说明从ASP.NET Webforms转换到MVC几乎是不可能的.不过我认为我的情况有所不同.

我大约一年前在Webforms中愚蠢地开始创建一个项目,但我采用的方法(据我所知)非常像MVC.我已禁用表单验证,不使用任何回发,使用URL重写和所有页面更改是加载ContentPlaceHolders的页面内容的AJAX请求(使用小hack,覆盖RenderControl方法).我还在网站中引用的单独项目中使用了自己的ORM和RESTful Service API.

现在系统运行良好,页面部分刷新正常,并且在进行ajax调用时更改了URL,因此当刷新页面时,它看起来完全相同.

现在我刚刚被告知我需要为一个新的大项目学习MVC(但我必须先完成另一个项目),但我已经完成了一些关于这个主题的阅读,并启动了一些Hello World应用程序,它似乎ASP.NET MVC的想法几乎就是我已经创建的.

StackOverflow仍然建议不要将Webforms应用程序转换为MVC吗?除了最佳实践之外,转换到MVC还有其他好处吗?

c# asp.net asp.net-mvc webforms

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