小编djv*_*djv的帖子

LINQ查询到LINQ方法; 为什么我需要CBool​​?

当我开始使用Entity Framework时,我使用了查询语法,因为我更习惯使用SQL而不是使用方法.现在我了解了如何使用Method,所以我将一些旧的LINQ Query转换为Method,因为我发现Method从编程角度来看更有意义.

我的问题是,为什么编译器要我在某些项目周围使用CBool​​(),而不是其他项目?它不是在C#中做到这一点,只有VB.

例;

这个

TotalYearWages = If((From t In DB.interview_earnings
    Where t.IID = Input.ID AndAlso  t.EarningsYear = Input.EarningsYear
    Select t.Amount).Sum, 0)
Run Code Online (Sandbox Code Playgroud)

变成了这个

TotalYearWages = If(DB.interview_earnings.
    Where(Function(t) t.IID = Input.ID AndAlso CBool(t.EarningsYear = Input.EarningsYear)).
    Select(Function(t) t.Amount).Sum(), 0)
Run Code Online (Sandbox Code Playgroud)

但在c#中这很好用

TotalYearWages == DB.interview_earnings
    .Where(t => t.IID == Input.ID && t.EarningsYear == Input.EarningsYear)
    .Select(t => t.Amount).Sum() ?? 0
Run Code Online (Sandbox Code Playgroud)

我的问题;

为什么我必须围绕where子句的某些部分使用CBool​​,而不是围绕其他部分?是什么决定了需求?

编辑;

没有CBool​​的错误是;

Severity    Code    Description Project File    Line    Suppression State
Error   BC30512 Option Strict On disallows implicit conversions from 'Boolean?' to 'Boolean'. …
Run Code Online (Sandbox Code Playgroud)

linq vb.net lambda entity-framework-6

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

在c#中将数据传递给回调方法(通过BeginInvoke)

我有以下代码:

    delegate int doStuffDel(int instanceNo, int sleepTime, int repeatCount);
    string result;

    private int doStuff(int instanceNo, int sleepTime, int repeatCount)
    {
        for (int i = 0; i < repeatCount; i++)
        {
            Console.Write(instanceNo);
            Thread.Sleep(sleepTime);
        }
        result = instanceNo + " repeated " + repeatCount;
        return instanceNo;
    }

    private void button3_Click(object sender, EventArgs e)
    {
        doStuffDel del = doStuff;
        IAsyncResult ar = del.BeginInvoke(3, 120, 50, finishedCallback, result);
    }

    private void finishedCallback(IAsyncResult ar)
    {
        Console.WriteLine("Done. The result was " + ar.AsyncState.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

我认为res.AsyncState将返回字符串,作为BeginInvoke调用中的最后一个参数传递,但它为null.有人知道为什么吗?

PS,我知道我可以将del作为BeginInvoke中的最后一个参数传递,然后在回调中调用EndInvoke,从doStuff方法中获取一些结果,或者我可以从类中获取字符串val! …

.net c# multithreading

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

惰性(T)用法/初始化

我试图弄清楚这两种懒惰用法之间的区别是什么,哪一种更适合使用,或者只是一样?

Dim context As New Lazy(Of DbContext)

Dim context As Lazy(Of DbContext) = New Lazy(Of DbContext)(Function() New DbContext())
Run Code Online (Sandbox Code Playgroud)

vb.net lazy-evaluation

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

如何在Android Studio中创建Android自定义视图库?

我已经创建了一个自定义视图,它扩展了我正在处理的项目的RelativeLayout.我认为它可能对其他人有用,所以我一直在尝试将其设置为库,以便其他人可以找到并使用它.

我还没有找到关于如何在Android Studio中进行设置的明确答案.

要清楚 - 我已经构建了视图并且它工作正常,我只想将其打包为库.

我是否创建了一个新项目并将我的代码放在那里,或者我是否也需要创建一个新模块?一旦我做了其中任何一件事,我需要更改清单和gradle文件的哪些部分?

最后,我是否需要以某种方式从文件中获取AAR,或者最好将其上传到GitHub并让其他人克隆它?

android jar android-library aar

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

使用带有OUT参数的VB6调用MySQL存储过程

我在MySQL(Server 5.5)中编写了这个程序

DELIMITER $$

DROP PROCEDURE IF EXISTS `InsertList` $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertList`(IN fName VARCHAR(20), IN fType VARCHAR(3), IN fFood varchar(20), Out fResult int)

BEGIN

  insert into tblguest (firstname, confirm, food) values (fName, fType, fFood);

  select count(id) from tblguest into fResult;

END $$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

当我从MySQL Query Browser调用此过程时,它会按预期返回

Call InsertList ('V1', 'No', 'F1', @result);

Select @result; 
Run Code Online (Sandbox Code Playgroud)

- >它成功返回表中id的计数

我在VB6中编写了以下代码

Dim res As Integer
On Error GoTo chkErr

Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandType = adCmdStoredProc
cmd.CommandText …
Run Code Online (Sandbox Code Playgroud)

mysql vb6 stored-procedures

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

运行两个实例时自动递增不正确

我有下面的代码运行的2个实例,它们连接到System.Data.SQLite数据库。当我使用任一实例将行插入数据库时​​,从其他实例读取时,自动递增的值(ID)不合适。这背后的原因是什么?

Imports System.Data.SQLite
Public Class Form1
    Public cnn As SQLiteConnection
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        cnn = New SQLiteConnection("Data Source=\\abc\xx\x_backup.db;Password=password;Connect Timeout=55;FailIfMissing=True")
        cnn.ParseViaFramework = True
        cnn.Open()
    End Sub
    Public Function inserttoTable(ByVal sql As String) As DataTable

         Try
            sql = "SELECT max(ID) FROM joblog;"
            Dim mycommand As SQLiteCommand = New SQLiteCommand(cnn)
            mycommand.CommandText = sql
            MsgBox(mycommand.ExecuteScalar)
            sql = "INSERT INTO joblog (jobid) VALUES (123);"

            mycommand = New SQLiteCommand(cnn)
            mycommand.CommandText = sql
            MsgBox(mycommand.ExecuteNonQuery())
        Catch ex As Exception
            MsgBox(ex.ToString)
        End …
Run Code Online (Sandbox Code Playgroud)

.net vb.net sqlite system.data.sqlite

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

如何设置文本框的数据类型

我正在构建一个连接到私有数据库的小应用程序.在我的应用程序中,我在文本框中输入数据,在单击按钮后在数据库中记录数据.我面临的问题是我想让某个文本框只接受整数以防止输入错误类型的数据.

c# sql

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

加载属性延迟加载

我有一个属性,getter应该只在第一次加载它的值.第二次返回加载的值而不再加载它:

private Object _MemberValue;

public Object MemberValue
{
    get
    {
        if(_MemberValue == null)
        {
            _MemberValue = LoadMember();
        }

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

在VB.NET中有Static关键字.有了它,您不必声明一个类宽成员.

Public Property MemberValue as Object
    Get
        Static value as Object = Nothing

        If (value is Nothing) Then
            value = LoadMember()
        End If

        Return value
    End Get
End Property
Run Code Online (Sandbox Code Playgroud)

在C#中没有这样的关键字.

是否有更好的C#实现此问题或其他模式?

c# vb.net design-patterns lazy-evaluation

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

简化ansible文件检查?

在ansible中,我做了很多这样的事情:

- name: Check if [someFile] exists on host
  stat: path=[someFile]
  register: someFile

- fail: msg="[someFile] not found"
  when: someFile.stat.exists == False
Run Code Online (Sandbox Code Playgroud)

我希望能够更简洁地表达它。像这样的东西:

- fail_on_missing_file: 
  path: [someFile]
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

ansible ansible-playbook

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

串行端口性能-VB.NET与C ++和Boost

我无法理解为什么我的应用程序需要花费这么长时间才能通过Windows 10上的串行端口与设备进行通信。我编写了两个小型测试应用程序以尝试查看导致其如此缓慢的原因。这是他们两个的代码:

''VB.NET code    
Imports System.IO.Ports

Module Module1

    Sub Main()
        Dim port As New SerialPort("COM3", 921600, Parity.None, 8, 1)

        port.Open()

        port.DtrEnable = True
        port.RtsEnable = True

        Dim profiler As New Stopwatch

        profiler.Start()

        For i As Integer = 1 To 100
            port.Write("1PA?" & vbCrLf)
            port.ReadLine()
            port.Write("TB" & vbCrLf)
            port.ReadLine()
        Next

        profiler.Stop()

        Console.WriteLine("Average: " & profiler.ElapsedMilliseconds / 100 & "ms")

        Console.ReadKey()
    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

和:

//C++ code
#include <iostream>
#include <string>

#include "boost/asio/io_service.hpp"
#include "boost/asio/serial_port.hpp"
#include "boost/asio/read_until.hpp"
#include "boost/asio/write.hpp"
#include "boost/asio/streambuf.hpp" …
Run Code Online (Sandbox Code Playgroud)

c++ vb.net performance serial-port boost-asio

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