相关疑难解决方法(0)

如何在Linq中的DateTime类型中仅将没有时间的Date与实体框架的SQL进行比较?

有没有办法比较Linq2Sql中的2个DateTime变量,但忽略了Time部分.

该应用程序将项目存储在数据库中并添加已发布的日期.我想保留确切的时间,但仍然可以按日期本身.

我想比较12/3/89 12:43:34和12/3/89 11:22:12然后忽略实际的时间,所以这两个都被认为是相同的.

我想我可以在比较之前将所有时间设置为00:00:00但我实际上确实想知道一天中的时间我也希望能够仅按日期进行比较.

我找到了一些具有相同问题的代码,他们分别比较了年,月和日.有一个更好的方法吗?

.net c# database entity-framework linq-to-sql

279
推荐指数
6
解决办法
27万
查看次数

使用Linq to Entities(EF6)动态选择列名

我想在使用EF6时封装常见的场景.这是一个例子:

   public class StringRequest : DbRequestProperty
   {
      public string Name { get; set; }
      public bool? ExactMatch { get; set; }

      protected override bool IsValid()
      {
         return !string.IsNullOrWhiteSpace(Name);
      }

      private bool RequestExactMatch()
      {
         return ExactMatch.HasValue && ExactMatch.Value;
      }

      protected override IQueryable<T> Execute<T>(IQueryable<T> original, string propertyName)
      {
         return RequestExactMatch()
            ? original.Where(o => GetProperty<string>(o, propertyName) == Name)
            : original.Where(o => GetProperty<string>(o, propertyName).Contains(Name));
      }
   }
Run Code Online (Sandbox Code Playgroud)

但GetProperty无法转换为查询.所以我正在考虑使用"propertyName"动态选择列.

  protected override IQueryable<T> Execute<T>(IQueryable<T> original, string propertyName)
  {
     return RequestExactMatch()
        ? original.Where(o => GetColumnByName<string>(propertyName) == Name)
        : …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities entity-framework entity-framework-6

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

表加入Entity Framework的性能问题

连接两个表导致选择时间从330秒增加到40秒.要加入的表仅包含ID和文本.加入两张桌子时,我没想到选择时间会增加8倍.我的JOIN有什么问题,或者这是正常的SQL Server行为吗?

主表填充了3500万条记录,以查看在达到10 GB的SQL Server Express限制时它的执行情况.在字段LogTimeStamp和字段LogType上创建了另一个索引.

连接表的内容:

表格Logtypes的内容

var queryList = messages
    .Join(types,
    type => type.LogType,
    typeText => typeText.LogType, (msg, msgType) => new
    {
        msg.LogID,
        msg.LogTimeStamp,
        msg.LogUser,
        msg.LogType,
        msgType.LogTypeName,
        msg.LogMessage
    })
    .Where(t => System.Data.Entity.DbFunctions.TruncateTime(t.LogTimeStamp) >= fromDate)
    .Where(t => System.Data.Entity.DbFunctions.TruncateTime(t.LogTimeStamp) <= toDate)
    .Where(t => t.LogType != 4)
    .OrderBy(m => m.LogID)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

结果SQL

SELECT 
  1 AS [C1], 
  [Extent1].[LogID] AS [LogID], 
  [Extent1].[LogTimeStamp] AS [LogTimeStamp], 
  [Extent1].[LogUser] AS [LogUser], 
  [Extent1].[LogType] AS [LogType], 
  [Extent2].[LogTypeName] AS [LogTypeName], 
  [Extent1].[LogMessage] AS [LogMessage]
  FROM  [dbo].[AuditTrailMessages] AS [Extent1]
  INNER JOIN [dbo].[AuditTrailLogTypes] AS …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server entity-framework join

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