这是正常的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) 对项目进行维护我遇到了代码,我觉得这些代码很难读,我希望重构,以提高可读性.
功能是需要按顺序执行的长链操作.只有在上一个操作成功时才应处理下一个操作.如果操作不成功,则需要设置相应的消息.返回的类型是布尔值.(成功的真/假).就像所有被调用动作的返回类型一样.
基本上它归结为这样的事情.
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
上下文:数据库规范化,我正在创建一个表:UserInvolvement.可以通过多种方式(基于角色和其他方式)User参与另一个实体:Foo.在当前情况下,每种类型的参与都作为单独的列添加到Foo表上,该列保存对用户的引用.但是这种类型的存储空间不足,当多个用户应该在Foo中具有相同类型的参与时.
他们决定在该参与专栏中将该FK作为CSV存储到用户.是的OMG!我也不敢相信.
所以现在我正在创建UserInvolvement表:
参与将是代码中的枚举器.
现在我的问题是: 我应该创建一个普通的枚举器吗?或者我应该使用按位枚举?
如果我选择一个按位枚举:我可以使FooID和UserID组合唯一.并且在小规模上它将减少该表中的记录总量.用户或者是否有参与Foo的类型.这是布尔值.没有多次具有相同类型的参与的事情.
我看到的挑战:这确实要求我总是使用按位运算"翻译"Involvement来检查实际的Involvement.如何使用EF在数据访问层中实现此功能?当我删除用户参与时,我应该更新按位值.除非没有标志,否则应删除它.
我忽略了其他任何影响吗?最后:最好的选择是什么?正常的枚举或按位枚举?
请阅读:https : //www.visualstudio.com/en-us/docs/tfvc/destroy-command-team-foundation-version-control
这几乎是不言自明的。
但是如果您想保留文件并且只删除一些历史记录怎么办?
请看下面的方法:
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调用它?
Trace.AutoFlush = true;
Trace.TraceInformation(string.Format("Try starting: {0}", System.Reflection.Assembly.GetExecutingAssembly().GetName()));
Trace.Flush();
Run Code Online (Sandbox Code Playgroud)
我已阅读:如何检查应用程序事件日志中的错误
但是我找不到任何痕迹!我究竟做错了什么?