小编AAA*_*ddd的帖子

如何将2个泛型类型传递给扩展方法

我创建了以下扩展方法

public static T Map<TEntity,T>(this TEntity entity) where TEntity : IEntity
{
    return Mapper.Map<TEntity, T>(entity);        
}
Run Code Online (Sandbox Code Playgroud)

这允许以下内容

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSet, ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的短路版本

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

请注意 :

是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务


更新

对于那些在家里玩的人,在scotts评论的帮助下,我设法找到一个额外的解决上述功能的通用扩展方法为automapper

public static T Map<T>(this IEntity entity) 
{
    return (T)Mapper.Map(entity, entity.GetType(), typeof(T));  
}
Run Code Online (Sandbox Code Playgroud)

但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点

c# generics extension-methods

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

使用异步和等待模式一步高效地将 IQueryable&lt;TSource&gt; 转换为 ImmutableArray&lt;TSource&gt;

我正在尝试以最有效的方式将集合选择不可变数组中。

我还想明确结果集的意图:只读/不可变/不跟踪

var someCollection = await _dataContext
    .Set<someType>()
    .AsNoTracking()
    .ToArrayAsync();
Run Code Online (Sandbox Code Playgroud)

我可以这样做,然后转换为不可变,但这看起来很疯狂。

var someImmutableCollection = someCollection
    .ToImmutableArray();
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

var someCollection = _dataContext
    .Set<someType>()
    .AsNoTracking()
    .ToImmutableArray();
Run Code Online (Sandbox Code Playgroud)

但这不是async

有没有理由ToImmutableArrayAsync()吗?

或者是否有更好的方法async从 efcore 获取不可变数组?

.net c# entity-framework entity-framework-core

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

如何将行的模型从Kendo Grid传递到可编辑的模板

我有一个Kendo Grid,它有一个弹出式可编辑模板,如果可能,我想将模型(行的模型,或至少它的Id)传递给可编辑的模板

@(Html.Kendo().Grid<Client>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.Name).Width(140);
        columns.Bound(c => c.Status);
        columns.Bound(c => c.ProcesingStyle);
        columns.Bound(c => c.ArchiveDays);
        columns.Command(command =>
        {
            command.Edit().Text(" ");
            command.Destroy().Text(" "); ;
        }).Width(90);

    })
     .ToolBar(toolbar => toolbar.Create().Text("New"))
     .Editable(editable => editable
        .Mode(GridEditMode.PopUp)
        .TemplateName("Client").AdditionalViewData(new { Client = Model })
        .Window(w => w.Title("Site")))
    .HtmlAttributes(new { style = "height: 380px;" })
    .Scrollable()
    .Sortable()
    .Selectable()
    .Resizable(resize => resize.Columns(true))
    .Reorderable(reorder => reorder.Columns(true))
    .Events(events => events.Change("onChange"))
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(5))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Get", "Clients"))
        .Model(model …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor kendo-grid

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

SQL删除具有相同值的所有连续记录,只留下第一个和最后一个

我有一种情况,我需要删除共享相同字段值的连续记录("无法通知客户"),但我需要保留第一个和最后一个实例

样本数据

date             type    log
20/11/2014 09:05 System, Order Added
20/11/2014 09:18 Mark,   Invoice Printed
20/11/2014 10:00 System, Failed to notify Customer
20/11/2014 10:05 System, Failed to notify Customer
20/11/2014 10:10 System, Failed to notify Customer
20/11/2014 10:15 System, Failed to notify Customer
20/11/2014 10:20 System, Failed to notify Customer
20/11/2014 12:05 System, Order Completed
Run Code Online (Sandbox Code Playgroud)

结果输出

date             type    log
20/11/2014 09:05 System, Order Added
20/11/2014 09:18 Mark,   Invoice Printed
20/11/2014 10:00 System, Failed to notify Customer
20/11/2014 10:20 System, Failed …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

如何创建接受相同Type,属性的2个对象并比较值的方法

我正在尝试创建一个辅助函数(对于一个类),它接受2个对象并比较两个类的属性

这些属性永远只能简单的类型,如string,intbool

用法

Compare(widget1,widget2,x => x.Name)
Run Code Online (Sandbox Code Playgroud)

到目前为止我有什么

  private void CompareValue<T>(Order target, Order source, Func<Order, T> selector)
  {
     if(target.selector != source.selector)
     {
       // do some stuff here
     }
  }
Run Code Online (Sandbox Code Playgroud)

显然上面的代码不起作用

c# compare

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

转义 Azure 存储 Blob 名称的正确方法

我正在将文件从 Windows 系统上传到 Azure 存储 blob

本地文件名可能包含在 blob 名称中无效的字符

我需要一种对这些名称进行编码的方法,以满足 MSDN 对 blob 存储名称提出的要求,如下所示

blob 名称必须符合以下命名规则:

  • Blob 名称可以包含任意字符组合。
  • Blob 名称的长度必须至少为 1 个字符,并且长度不能超过 1,024 个字符。
  • Blob 名称区分大小写。
  • 必须正确转义保留的 URL 字符。
  • 包含 blob 名称的路径段的数量不能超过 254。路径段是与虚拟目录名称对应的连续分隔符(例如,正斜杠“/”)之间的字符串。

上面的相关信息是“必须正确转义保留的 URL 字符。但是,使用什么方法是“标准”?

.net azure azure-storage-blobs azure-functions

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

Async/Await vs Parellel.For,在这种情况下哪个更好?

所以我有1000件物品来检查它们是否是最新的.这些项目中的每一项都需要读取数千个文件(其中一些文件可能是不同项目中的相同文件).

目前,这是使用TPL(异步/等待)的实现,一个用于每个必须读取的文件,一个用于它必须检查的每个项目.这工作正常,除了我描述它时,关于第3个最昂贵的函数是线程池中的TrySteal.

使用visual studio并发查看器,我看到99%的线程花费在并发相关项目上,而执行时只有1%.正是这一点让我觉得我可能只是创造了太多的任务(注意:我没有在任何地方使用Task.Run,​​只是等待).

Parellel.For是否比使用async/await读取一堆文件要少得多?使用任务编程库需要多少开销?

.net c# multithreading asynchronous

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

使用 XAML 将彩色图像转换为灰度图像?

最好使用 XAML,

我需要从下到上在彩色图像上动态应用灰度滤镜。也就是说,我希望能够以语法方式更改应用于我的图像程序的灰度滤镜的偏移值。

例如,我想以编程方式将图像的 50% 设置为彩色(从图像底部到中间),将图像的其他 50% 设置为灰度(例如从图像的中间到其中间)顶部)。

我读了很多不同的答案,尝试了很多不同的事情,并考虑了很多不同的方法来做到这一点。

  • 我可以有两张图片,一张叠在另一张上面。一种是灰度的,另一种是彩色的。然后,我将以编程方式更改灰度图像的大小,以便其下方的彩色图像部分显示并向用户创建一种半半视图。

然而,这个解决方案提出了一个我似乎无法解决的问题。当更改灰度图像的高度值时,由于“拉伸”属性设置为“均匀”(并且我不希望更改为“无”),图像会自动重新缩放自身。

  • 另一种方法是以编程方式更改图像的颜色像素。我过去在这方面取得了一些成功,但是,这对于我在这里尝试做的事情来说太慢了(理想情况下,我会将图像的颜色从灰度更改为由用户每 50 毫秒一次,直到达到一定高度)。

  • 第三种方法是在图像上应用不透明蒙版,并使用LinearGradientBrush将偏移值更改为所需位置。这是我当前正在使用的代码,它可以工作,但只需将灰色应用于图像,而不将图像的原始颜色更改为灰度(导致某种褪色的彩色图像):

XAML:

<Image x:Name="myImage" HorizontalAlignment="Left" VerticalAlignment="Top" Source="C:\Users\Clement\Desktop\test.png" Canvas.Left="159" Canvas.Top="81" Width="500" Height="375" >
            <Image.OpacityMask>
                <LinearGradientBrush EndPoint="0.5,0" MappingMode="RelativeToBoundingBox" StartPoint="0.5,1">
                    <GradientStop x:Name="myImageLinearGradientBrushStop" Color="Black"/>
                    <GradientStop Color="Transparent" Offset="1"/>
                </LinearGradientBrush>
            </Image.OpacityMask>
</Image>
Run Code Online (Sandbox Code Playgroud)

代码隐藏(在每 50 毫秒重复一次的timerEventProcessor 中):

myImageLinearGradientBrushStop.Offset = percent * 0.01;
Run Code Online (Sandbox Code Playgroud)

正如前面提到的,我浏览了很多不同的网站,阅读了很多类似的问题并尝试了很多不同的答案,但仍然无法令人满意地解决问题。

c# wpf xaml image grayscale

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

防止屏幕通过C#休眠

我创建了一个小型C#控制台应用程序,以在屏幕上移动指针,希望这可以防止屏幕在几分钟后进入休眠/锁定状态。不幸的是,屏幕在几分钟后仍然进入睡眠状态。

有谁知道实际上是否可以用C#编写类似于用户输入(鼠标或键盘)的行为,并防止屏幕自动休眠/锁定?

这是我所拥有的,我认为可以解决这个问题。

class Program
{
    [DllImport("user32.dll")]
    static extern bool SetCursorPos(int X, int Y);

    static Random rnd = new Random();

    static void Main(string[] args)
    {

        Rectangle screenRes = Screen.PrimaryScreen.Bounds;
        int widtMax = screenRes.Width;
        int heighMax = screenRes.Height;

        int w;
        int h;

        do
        {
            while (!Console.KeyAvailable)
            {
                w = rnd.Next(1, widtMax);
                h = rnd.Next(1, heighMax);

                SetCursorPos(w, h);
                System.Threading.Thread.Sleep(1000);
            }
        } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# windows user-input

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

带小数类型的C#百分比计算会导致问题

decimal hundred = 100;
decimal value = 5000;
decimal sum = 1100000;

decimal valuePercentOfSum = value / sum * hundred;        //result = 0.4545454545454545454545454500M
decimal percentOfSum = sum / hundred * valuePercentOfSum; //result = 4999.9999999999999999999999500M
Run Code Online (Sandbox Code Playgroud)

我希望结果是percentOfSum值的原始(5000)

我需要一种方法来做这样的来回计算,我不能做任何舍入.

有帮助吗?

c# math decimal percentage

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