小编Ton*_*olf的帖子

LINQ与LINQ to Entities,在分组时保持排序

这是正常的LINQ,并且此测试成功:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;

namespace TestLINQ.Tests
{
[TestClass]
public class UnitTest2
{

    [TestMethod]
    public void TestGroupingAndOrdering()
    {
        var persons = GetTestPersons();

        //Try get oldest Man and oldest Woman.
        var Oldest = persons
            .Where(p => p.Sex == TestGender.Male || p.Sex == TestGender.Female)
            .OrderBy(p => p.DateOfBirth)
            .GroupBy(p => p.Sex)
            .Select(g => g.First());

        //Try get youngest Man and youngest Woman. 
        var youngest = persons
            .Where(p => p.Sex == TestGender.Male || p.Sex == TestGender.Female)
            .OrderByDescending(p => p.DateOfBirth) //reversed sorting. …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

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

结构化顺序处理的最佳设计模式

对项目进行维护我遇到了代码,我觉得这些代码很难读,我希望重构,以提高可读性.

功能是需要按顺序执行的长链操作.只有在上一个操作成功时才​​应处理下一个操作.如果操作不成功,则需要设置相应的消息.返回的类型是布尔值.(成功的真/假).就像所有被调用动作的返回类型一样.

基本上它归结为这样的事情.

string m = String.Empty; // This is the (error)Message.
bool x = true; // By default the result is succesful.

x = a1();
if(x) {
    x = a2();
}
else {
    m = "message of failure a1";
    return x;
}

if(x) {
    x = a3();
}
else {
    m = "message of failure a2";
    return x;
}

//etcetera..etcetera...

if(x){
    m = "Success...";
}
else{
    m = "Failure...";
}

return x;
Run Code Online (Sandbox Code Playgroud)

我的问题是:处理这种逻辑的更好的结构/模式什么?

主要目标是:

  • 提高可读性.
  • 提高可维护性. …

c# algorithm maintainability design-patterns code-readability

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

使用按位枚举的优点/缺点?

上下文:数据库规范化,我正在创建一个表:UserInvolvement.可以通过多种方式(基于角色和其他方式)User参与另一个实体:Foo.在当前情况下,每种类型的参与都作为单独的列添加到Foo表上,该列保存对用户的引用.但是这种类型的存储空间不足,当多个用户应该在Foo中具有相同类型的参与时.

他们决定在该参与专栏中将该FK作为CSV存储到用户.是的OMG!我也不敢相信.

所以现在我正在创建UserInvolvement表:

  • FooID
  • 用户身份
  • 参与

参与将是代码中的枚举器.

现在我的问题是: 我应该创建一个普通的枚举器吗?或者我应该使用按位枚举?

如果我选择一个按位枚举:我可以使FooIDUserID组合唯一.并且在小规模上它将减少该表中的记录总量.用户或者是否有参与Foo的类型.这是布尔值.没有多次具有相同类型的参与的事情.

我看到的挑战:这确实要求我总是使用按位运算"翻译"Involvement来检查实际的Involvement.如何使用EF在数据访问层中实现此功能?当我删除用户参与时,我应该更新按位值.除非没有标志,否则应删除它.

我忽略了其他任何影响吗?最后:最好的选择是什么?正常的枚举或按位枚举?

c#

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

使用 TFS 销毁命令

请阅读:https : //www.visualstudio.com/en-us/docs/tfvc/destroy-command-team-foundation-version-control

这几乎是不言自明的。

但是如果您想保留文件并且只删除一些历史记录怎么办?

tfs tfvc

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

C#,使方法更通用

请看下面的方法:

internal IEnumerable<Query> FilterOnUserInvolvement(IEnumerable<Query> input)
{
    var user = _userManager.GetUserByADName(_user.Identity.Name);
    if (_userManager.IsUserAdministrator(user) || _userManager.IsUserStaff(user))
    {
        return input;
    }
    else
    {
        using (var context = new QAContext())
        {
            var involvedQueries = context.UserInvolvement.Where(x => x.UserID == user.ID).Select(x => x.QueryID).ToList();
            return input.Where(i => involvedQueries.Contains(i.ID));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这个方法获取IEnumerable<Query>并返回相同的内容.

实际上,此方法的功能可以应用于任何IEnumerable<Type>持有ID的功能.

如何使用泛型重写此查询,以便可以使用另一个包含ID的Type调用它?

c# generics

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

诊断,在哪里读取 Trace.TraceInformation?

Trace.AutoFlush = true;
Trace.TraceInformation(string.Format("Try starting: {0}", System.Reflection.Assembly.GetExecutingAssembly().GetName()));
Trace.Flush();
Run Code Online (Sandbox Code Playgroud)

我已阅读:如何检查应用程序事件日志中的错误

但是我找不到任何痕迹!我究竟做错了什么?

.net c# system.diagnostics

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