小编Cra*_*aig的帖子

查询效率

我想知道哪个是从大型数据库查询数据的最佳方法.

假设我需要获取所有居住在美国的用户的列表,以及他们的订单和属于他们订单的产品.为简单起见,我们有一个user表,其中有一个CountryId表...然后是一个Order表,带有userId..然后可能是一个OrderProduct表,列出许多产品到订单(许多订单可以包含相同的产品).

我的问题是,或许可以通过创建临时表来更好

SELECT userId FROM dbo.User WHERE countrId = @CountryId
Run Code Online (Sandbox Code Playgroud)

我们现在在临时表中有相关​​用户.

然后,做一个

Select p.ProductDescription ... 
From @TempTable tmp 
INNER JOIN Order o 
ON o.UserId = tmp.UserId 
INNER JOIN OrderProduct op
ON op.OrderID = o.OrderId
INNER JOIN Product p
ON p.ProductId = op.ProductId
Run Code Online (Sandbox Code Playgroud)

所以,我正在做的是获取我需要的用户....并将其移动到临时表中,然后使用该临时表来过滤主查询的数据.

或者,它是否有效,如果不是更多,只需一个人做到这一点......

Select ... from User u
INNER JOIN Order o
....
WHERE u.UserId = @UserId 
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

SqlDataReader 的扩展方法?

我们在一个来自 VB6 的旧项目上运行了一个转换工具。

我们用 Ado.Net 代替 OLEDB,用 SqlDataReaders 代替 RecordSet。

但转换后的代码总是会进行rs.Fields['FirstName']引用,我猜这将是rs['FirstName']数据库读取器的引用(其中 rs 现在是 q SqlDataReader.

有没有办法可以在 SqlDataReader 上创建一个扩展方法,然后使用“ Fields['FieldName']”,而不是遍历所有代码?

这是我目前的尝试:

public static class SqlUtils
    {
        public static object Fields(this SqlDataReader dataReader, string fieldname)
        {
            return dataReader[fieldname];
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,这适用于:

Console.WriteLine(reader.Fields("First").ToString());
Run Code Online (Sandbox Code Playgroud)

我需要处理:

Console.WriteLine(reader.Fields["First"].ToString());
Run Code Online (Sandbox Code Playgroud)

注意,是[],不是()。

c# extension-methods

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

从SQL Server读取 - 需要从CSV读取

目前,我从SQL serve r(2008)数据库中获取数据.cyurrent方法是使用DataTable,然后传递并使用它.

    if (parameters != null)
    {
        SqlDataAdapter _dataAdapter = new SqlDataAdapter(SqlQuery, CreateFORSConnection());
        foreach (var param in parameters)
        {
            _dataAdapter.SelectCommand.Parameters.AddWithValue(param.Name, param.Value);
        }
        DataTable ExtractedData = new DataTable(TableName);
        _dataAdapter.Fill(ExtractedData);
        return ExtractedData;
    }
    return null;
Run Code Online (Sandbox Code Playgroud)

但是现在,用户已经说过我们也可以从txt文件中获取数据,这些文件与SQL Server中的表具有相同的结构.所以,如果我有一个名为'Customer'的表,那么我有一个带有Customer的csv文件.具有相同的列结构.CSV中的第一行是列名,并匹配我的表.

是否可以将txt文件读入数据表,然后以某种方式在该数据表上运行SELECT?我的大多数查询都是单表查询:

SELECT * FROM Table WHERE Code = 111
Run Code Online (Sandbox Code Playgroud)

但是,有一个案例我会加入.这可能有点棘手,但我可以制定一个计划.如果我可以先将txt文件放到数据表中,我可以使用它.

使用上面的代码,我是否可以不将连接字符串更改为从CSV而不是SQL Server读取?

c# sql datatable

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

MVC返回View不调用控制器

我对MVC非常陌生,但我正在与一个可能非常基本和明显的问题作斗争.

在我的HomeController上,我有:

[HttpGet]
public ViewResult Index()
{
    int hour = DateTime.Now.Hour;
    var reply = User.Identity.IsAuthenticated ? User.Identity.Name + " is Logged in!" : hour < 12 ? "Good morning" : "Good afternoon";
    ViewBag.Greeting = reply;
    return View();
}
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序时,此代码运行.

该页面作为登录屏幕的链接.

<div>
    @Html.ActionLink("Login", "ShowLoginScreen")
</div>
Run Code Online (Sandbox Code Playgroud)

页面加载,用户登录.

加载登录cshtml文件,用户输入用户名/密码:

<body>
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary()
        <p>Username: @Html.TextBoxFor(x=>x.Username)</p>
        <p>Password: @Html.TextBoxFor(x=>x.Password)</p>
        <p><input type="submit" value="Login"/></p>

    }
</body>
Run Code Online (Sandbox Code Playgroud)

单击Login时,它会调用HomeController中的方法:

[HttpPost]
        public ActionResult ShowLoginScreen(Login login)
        {
            if (ModelState.IsValid)
            {
                var reply = new BasicFinanceService.UserService().Authenticate(login.Username,
                                                                               Security.EncryptText(login.Password));
                if(reply.Id != 0)
                    FormsAuthentication.SetAuthCookie(reply.Username, …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-4

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

架构中的服务层 - DLL?

我们正处于.Net的中型/大型应用程序的早期设计阶段,对于一个系统内部有三个不同的客户端(站点)(一个在一个单独的域中)连接,以及很多外部服务.

我们现在专注于连接的内部站点,我正在提出一个经典的分层应用程序,包括接口层,服务层,业务逻辑层和数据访问层.

在此输入图像描述

在图像中,我们有一个连接到MVC应用程序的浏览器.控制器具有对服务项目的引用(可能具有每个"业务区域"的类.例如,"PersonService").MVC将直接引用此服务项目.在服务层中,还会有一些WCF项目,将某些功能暴露给外部源,其他内部站点和服务等.

但是,WCF项目将连接到主服务DLL以从中获取共享功能.

然后,Service项目直接引用Business项目,其中包含所有业务逻辑.然后它引用了数据访问项目,该项目具有/某些实体框架模型作为SQL Server数据库的ORM.

SharedLib只是一个所有层引用的项目,包含任何共享逻辑,但主要用于DTO(数据传输对象).EF模型被转换为数据层中的DTO,因为没有其他层参考EF模型.

但MVC应用程序,通过应用程序内的直接引用连接到服务层,以及将WCF服务暴露给外部源和跨域内部站点.

我们遇到的问题是服务层.我认为这应该是一个DLL,其他人说,如果没有WCF,那么表示应该直接连接到业务逻辑层.他们问,'为什么在这里添加服务DLL的额外层和复杂性?'.

消除表示"可以"直接连接到逻辑的服务层是一种好习惯吗?我看到服务层的好处是增加了业务和表示的明确隔离,允许扩展.它看起来像是通过dll,但直接连接到BL看起来很奇怪.

是否有使用DLL的pro/con有理由保持/不保留它?

.net c# architecture dll wcf

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

使用AutoMapper进行转换

我目前在我的MVC项目中手动执行DTO => ViewModel转换.所以,代码看起来像这样:

var model = new LandingModel {
                FamilyName = token.FamilyName,
                LoggedInUser = token.DisplayName,
                TimeZoneName = token.TimeZoneName,
                CurrentDateTime = Common.SessionManager.GetSessionDate().ToString(SharedLib.Constants.FMT_DATE_AND_TIME_LONG)
            };
Run Code Online (Sandbox Code Playgroud)

LandingModel看起来像这样:

public class LandingModel
{
    public string FamilyName { get; set; }
    public string LoggedInUser { get; set; }
    public string TimeZoneName { get; set; }
    public string CurrentDateTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我如何处理CurrentDateTime?它是模型中的一个字符串,通过从会话变量获取用户时区日期时间并应用字符串格式来处理.

我怎么能这样做呢 Mapper.Map<SessionToken>(model));

注意,.GetSessionDate()只需要采用UTC日期,并添加用户时区的偏移量,以根据它们提供当前日期.

c# automapper

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

使用ToList进行异步,等待和任务

我试图学习如何使用await和async.

我有一个服务层,它有一个参考数据管理器.我的界面是:

public interface IReferenceDataService
    {
        Task<List<ReferenceItemDto>> GetAsync(ReferenceTypes type);
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试在UI中获取数据时,我这样做:

    model.DeptPaymentTypes = _refDataService.GetAsync(Enums.ReferenceTypes.DeptPaymentTypes)
       .Select(x => new SelectListItem { 
          Text = x.Description, 
          Value = x.Id.ToString() })
        .ToList();
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,"ToList不是Task <...的定义"

我的数据层调用使用Dapper QueryAsync获取数据...

 public async Task<List<ReferenceItemDto>> GetAsync(Enums.ReferenceTypes type)
        {
            var table = string.Empty;

            if(type == Enums.ReferenceTypes.DaysOfMonth)
            {
                var days = new List<ReferenceItemDto>();
                for (int i = 1; i <= 31; i++)
                {
                    days.Add(new ReferenceItemDto
                    {
                        Description = i.ToString(),
                        Id = i
                    });
                }
                return days;
            }


            switch (type)
            {
                case Enums.ReferenceTypes.SnowballTypes:
                    table …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await dapper

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

尝试获取结果列表时出现等待/异步错误

有人可以向我解释为什么我会为此收到设计/编译时错误。

我试图根据最后更新日期或创建日期获取每个表的最后一个 Guid。

var accountId = context.Account.OrderBy(x => x.LastUpdateDate).ThenBy(x=>x.LastUpdateDate).FirstOrDefaultAsync(x => x.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var transactionLineId = context.TransactionLine.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.Transaction.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var transactionId = context.Transaction.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var budgetId = context.Budget.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
var scheduleId = context.Schedule.OrderBy(x => x.LastUpdateDate).ThenBy(x => x.LastUpdateDate).FirstOrDefaultAsync(x => x.CreditAccount.UserAccount.ExternalId == _jwt.HomeAccountId).ExternalId;
Run Code Online (Sandbox Code Playgroud)

然后,等待每个响应并传递给一个方法。

var guids = new List<Guid> { await accountId, await transactionLineId, await transactionId, await budgetId, await scheduleId };

var …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous

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

使用三点跨度触发 DropDown

我正在使用 react-bootstrap,并且有一个带有插入符号的按钮,可以触发下拉列表。

在此处输入图片说明

但是我需要使用垂直的 3 个点,而不是按钮样式。

我有一个对三个点使用 CSS 类的跨度,但似乎无法找到摆脱按钮和插入符号的方法。

我现在最紧张的是:

<Dropdown>
    <Dropdown.Toggle>
      <span className="threedots"></span>
    </Dropdown.Toggle>
    <Dropdown.Menu size="sm" title=""> 
      <Dropdown.Header>Options</Dropdown.Header>
      <Dropdown.Item .... ></Dropdown.Item>
    </Dropdown.Menu>
 </Dropdown>
Run Code Online (Sandbox Code Playgroud)

我只想看到三个点(我将添加鼠标悬停效果)。有没有办法使用快照作为切换>

css reactjs react-bootstrap

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

Cosmos DB 返回 404

我正在成功连接我的新 Cosmos DB。

private async Task InitialiseDb()
        {
            client = new CosmosClient(cosmosUrl, cosmosKey);
            database = await client.CreateDatabaseIfNotExistsAsync(databaseName);
            container = await database.CreateContainerIfNotExistsAsync("MyContainer", "/id");
        }
Run Code Online (Sandbox Code Playgroud)

然后,我设法将一个项目填充到我的 Cosmos 实例中。

 var response = await container.CreateItemAsync(myDocument);
Run Code Online (Sandbox Code Playgroud)

当登录到 Azure 并查看我的项目时,我看到了该项目。所以就保存下来了。

现在我试图取回该项目,但收到有关 的错误not found

Microsoft.Azure.Cosmos.CosmosException :响应状态代码不指示成功:NotFound (404);子状态:0;活动ID:e90da49c-510e-4940-a888-9531427a3810;原因:(错误:[“未找到资源。了解更多信息:https://aka.ms/cosmosdb-tsg-not-found”]);

我获取该物品的方法非常简单:

public async Task<MyDto> GetRecord(Guid myId)
        {
            var data = await container.ReadItemAsync<FlightDoc>(myId.ToString(), new PartitionKey("id"));
            return new MyDto
            {
                Id = Guid.Parse(data.Resource.id)
            };
            
        }
Run Code Online (Sandbox Code Playgroud)

我认为我误解了分区及其工作原理。有什么明显不对的地方吗?这是我的数据浏览器的部分屏幕截图:

在此输入图像描述

我正在传递上面 ID 中显示的 ID。

编辑:更好地解释数据。这次飞行,收集了很多样品。一个航班有很多样本...每个样本都有一个 ID。但我正在努力带回 Flgith 和样本。

在此输入图像描述

c# azure azure-cosmosdb

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