小编fin*_*ook的帖子

为什么.Count没有括号?

如果我List<string> items在C#中有一个项目列表(例如),我可以使用两者:

items.Count()
Run Code Online (Sandbox Code Playgroud)

items.Count
Run Code Online (Sandbox Code Playgroud)

获得项目总数.它们都有可用吗?为什么不只是有方法.Count()

我注意到,如果我过滤列表(并最终得到IEnumerable<string>):

items.Distinct().Count()
Run Code Online (Sandbox Code Playgroud)

然后.Count()必须使用.那为什么要List<string>允许.Count呢?

c#

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

Mongoexport在CSV输出中获取嵌套对象的属性

我正在尝试使用mongoexport从mongo-db获取CSV.

我的数据采用以下格式:

{
    "_id": "99",
    "page_id": NumberLong(1122334455),
    "data": {
        "0": {
            "item_id": NumberLong(123456789),
            "item_name": "item1"

        },
        "1": {
            "item_id": NumberLong(987654321),
            "item_name": "item2"
        },
     },
    "last_updated_utc": ISODate("2013-12-19T13:17:43.994Z")

}
Run Code Online (Sandbox Code Playgroud)

为此,我使用以下命令:

mongoexport -f _id,page_id,last_updated_utc --query {page_id:1122334455} -d mydatabase -c mycollection --csv
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

"99",1122334455,2013-12-19T13:17:43.994Z
exported 1 record
Run Code Online (Sandbox Code Playgroud)

问题是我需要输出中item_namedata元素.这些是动态数组,可能不包含任何项目或许多项目.

如果我添加data到字段(-f)参数,那么它只会将此作为JSON字符串输出到CSV中,用于每个对象,这对将来使用数据没有帮助.

我的目标是:

"99",1122334455,2013-12-19T13:17:43.994Z,item1
"99",1122334455,2013-12-19T13:17:43.994Z,item2
Run Code Online (Sandbox Code Playgroud)

几乎是非规范化的,或者像SQL中的外连接一样.所以它只是data项目ID.

这可能吗?如何item_id进入CSV输出?

mongodb mongoexport

5
推荐指数
2
解决办法
6541
查看次数

为什么不是C#不等式运算符!==?

在C#中,==用于检查相等性,而=用于赋值.

这是否意味着检查不平等应该是真的!==.

为什么不是这种情况?是因为历史原因吗?

它的崛起!=已经看到它现在也在大多数SQL变体中建立起来.

c# operators

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

AddRange()应该返回一个列表

在以下代码中:

var cats = new List<string>() {"cat1", "cat2"};
var dogs = new List<string>() {"dog1", "dog2"};

var animals = new List<Animal>();

animals = (cats.Select(x => new Animal() {Type = "Cat", Name = x}).ToList().AddRange(
                        dogs.Select(x => new Animal() {Type = "Dog", Name = x}).ToList())).ToList();
Run Code Online (Sandbox Code Playgroud)

最后调用ToList()是一个错误,因为AddRange()返回void.现在使用Linq类型查询时似乎不对.

我发现我可以将其更改为.Union().Concat()修复问题,但不应AddRange()更新,或者是否有理由将其返回无效?

c# linq

4
推荐指数
2
解决办法
1093
查看次数

以编程方式将ASP.Net GridView列设置为Button字段

我正在代码中生成gridview的列,这些代码工作正常(我已AutoGenerateColumns="false"在页面上设置),因此我没有在html标记中定义任何列.

我想将其中一个列设为ButtonField,因此我可以在代码中使用RowCommand处理程序 - 有没有办法以编程方式将列设为ButtonField?

asp.net gridview

3
推荐指数
1
解决办法
4957
查看次数

决定使C#类静态

如果我Utilities.cs在C#中有一个类,它只包含静态方法

例如

public static string DoSomething()
{
    return "something";
}
Run Code Online (Sandbox Code Playgroud)

我应该让这个类本身是静态的吗?

public static Utilities()
{
    ...
Run Code Online (Sandbox Code Playgroud)

使类静态有什么优势吗?

c# static static-methods class

3
推荐指数
2
解决办法
284
查看次数

SQL Server标识列递增而不插入

我有一个C#控制台应用程序,它使用存储过程将行插入SQL Server数据库.目前,数据库有大约1米的行,但ID列的最大长度为26米!

在最后一次成功插入时,ID从16米到26米.该应用程序并行运行多个线程,因此有可能尝试同时插入两个东西.

除了事务回滚之外还有什么可以导致标识列在不添加行的情况下递增吗?

似乎不太可能有两千个线程试图同时写一个冲突的行.

我正在使用一个临时表变量,它通过将XML传递到存储过程来填充:

-- insert data if it doesn-t already exist  
insert into DataStore (DataText, DataSourceID)
select distinct td.dataText, td.dataSource 
  from @tempData td
 where not exists ( select 'x' 
                      from DataStore ds 
                     where ds.DataText = td.dataText );
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server identity

3
推荐指数
1
解决办法
1347
查看次数

带有C#和Apache NMS的ActiveMQ - 计算队列中的消息

我正在使用ActiveMQ使用C#应用程序发送和接收消息.但是我在队列中计算消息时遇到了一些困难.这是我的代码:

    public int GetMessageCount()
    {
        int messageCount = 0;
        Uri connecturi = new Uri(this.ActiveMQUri);

        IConnectionFactory factory = new NMSConnectionFactory(connecturi);

        using (IConnection connection = factory.CreateConnection())
        using (ISession session = connection.CreateSession())
        {
            IDestination requestDestination = SessionUtil.GetDestination(session, this.QueueRequestUri);

            IQueueBrowser queueBrowser = session.CreateBrowser((IQueue)requestDestination);
            IEnumerator messages = queueBrowser.GetEnumerator();

            while(messages.MoveNext())
            {
                messageCount++;
            }

            connection.Close();
            session.Close();
            connection.Close();
        }

        return messageCount;
    }
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用QueueBrowser来获取计数,但它返回的IEnumerator总是为空.我从这个页面得到了使用QueueBrowser的想法,但也许还有另一种方法我应该这样做?

更新:

我通过枚举器找到的"无限循环"问题的解决方案是通过访问当前消息来解决的.它现在只经过一次循环(这是正确的,因为队列中只有一条消息).

新的while循环是:

while(messages.MoveNext())
{
    IMessage message = (IMessage)messages.Current;
    messageCount++;
}
Run Code Online (Sandbox Code Playgroud)

c# activemq-classic message-queue apache-nms

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

在C#Tuple中使用Int64

我确信这很简单,但是在使用.Create()Tuple类的方法时我遇到了编译器错误.

Dictionary<long, Tuple<long, long>> test = new Dictionary<long, Tuple<long, long>>();
test.Add(1, Tuple.Create(1, 2)); // <-- compiler error
Run Code Online (Sandbox Code Playgroud)

错误是Tuple.Create具有无效参数,因为它期望长,并且我放入的数字被视为整数.

在这种情况下,是的,它们在int的范围内,但它们有时可能具有对于int而言太大的值.

我可以强制(long)1转换代码来编译,但这似乎不对 - 我错过了什么?

c# generics tuples

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