小编Ste*_*ger的帖子

Linq风格"For Each"

可能重复:
Linq相当于IEnumerable的foreach

是否有"For each"操作的Linq样式语法?

例如,将基于一个集合的值添加到另一个集合,已存在的集合:

IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };

IList<int> list = new List<int>();

someValues.ForEach(x => list.Add(x + 1));
Run Code Online (Sandbox Code Playgroud)

代替

foreach(int value in someValues)
{
  list.Add(value + 1);
}
Run Code Online (Sandbox Code Playgroud)

.net c# linq foreach

182
推荐指数
5
解决办法
36万
查看次数

持久性无知有什么好处?

我是DDD + TDD世界的新手.但我已经编程了将近9年.

有人可以解释我坚持不懈的好处吗?典型的nHibernate应用程序只是将类和数据库之间的依赖关系推送到映射文件.

如果我更改类文件或数据库,我必须更改映射文件.那么是不是只是通过添加一个抽象层来推动依赖?在我看来,到目前为止,我认为这不是革命性的.但我不确定我是否遗漏了什么.

最后,我如何测试映射文件?映射文件中可能会出现错误,我该如何测试它们?

domain-driven-design persistence-ignorance

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

C#:从lambda表达式中获取链中属性的名称

我正在开发一个使用lambda表达式来指定属性的API.我正在使用这个与此类似的着名代码(这是简化和不完整的,只是为了说清楚我在说什么):

public void Foo<T, P>(Expression<Func<T, P>> action)
{
    var expression = (MemberExpression)action.Body;
    string propertyName = expression.Member.Name;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

被称为这样:

Foo((String x) => x.Length);
Run Code Online (Sandbox Code Playgroud)

现在我想通过链接属性名来指定属性路径,如下所示:

Foo((MyClass x) => x.Name.Length);
Run Code Online (Sandbox Code Playgroud)

Foo应该能够将路径拆分为其属性名称("Name""Length").有没有办法以合理的努力做到这一点?


有一个类似的外观问题,但我认为他们正试图在那里结合lambda表达式.

另一个问题也是处理嵌套的属性名称,但我真的不明白他们在谈论什么.

c# lambda

37
推荐指数
3
解决办法
8796
查看次数

C#有太多的语言功能吗?

这是我们团队中不时出现的讨论.虽然有一些人很快学会了C#3.0的功能,但其他人坚持使用经典技术.

有些人从不使用Linq,认为lambda表达式令人困惑,而且收益率是"可怕的".有时他们很难理解使用所有新功能的人编写的代码.我们可以说他们不掌握语言并且应该学习它.

但是,学习现代编程语言有多难?每个人都可以解决问题,每个人每天都要解决许多其他问题,而不是关心实施它的更好方法.培训人员不是免费的.另一方面,语言功能可以提高人们的工作效率,使代码更易于维护.

可能不完整的C#功能列表

  • 类,结构,基本类型,数组,装箱,接口,继承(抽象,虚拟,新,密封),属性,nullables
  • 例外
  • 仿制药
  • 多线程,锁
  • 反射
  • 代表,活动,匿名代表
  • 迭代器
  • lambda表达式
  • 扩展方法
  • LINQ

版本4即将推出,包括许多其他功能.

就个人而言,我几乎喜欢C#的所有功能,并喜欢用这种语言编写的简短代码.但我不必从头学习它.

我对您的意见以及您在学习或教授C#方面的经验感兴趣.是否有太多功能?还缺少重要的功能吗?语言功能是否使语言更易于使用或更难学?

请:没有答案像"语言A比语言B更好,因为......".

c# language-features language-design

35
推荐指数
3
解决办法
4604
查看次数

在NHibernate中获取正确类型的代理

我在nhibernate中遇到了未初始化的代理问题

领域模型

假设我有两个并行的类层次结构:Animal,Dog,Cat和AnimalOwner,DogOwner,CatOwner,其中Dog和Cat都继承自Animal和DogOwner,CatOwner都继承自AnimalOwner.AnimalOwner有一个名为OwnedAnimal的类型的引用.

以下是示例中的类:

public abstract class Animal
{
   // some properties
}

public class Dog : Animal
{
   // some more properties
}

public class Cat : Animal
{
   // some more properties
}

public class AnimalOwner 
{
   public virtual Animal OwnedAnimal {get;set;}
   // more properties...
}

public class DogOwner : AnimalOwner
{
   // even more properties
}

public class CatOwner : AnimalOwner
{
   // even more properties
}
Run Code Online (Sandbox Code Playgroud)

这些类具有正确的nhibernate映射,所有属性都是持久的,并且可以延迟加载的所有内容都是延迟加载的.

应用程序业务逻辑只允许您在DogOwner中设置Dog,在CatOwner中设置Cat.

问题

我有这样的代码:

public void ProcessDogOwner(DogOwner owner)
{
   Dog …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate proxy

19
推荐指数
2
解决办法
8766
查看次数

用Hibernate HQL删除和

Hibernate不会删除我的行:

public boolean deleteVote(Login user, int pid){

      Session session = getSession();

      try{
          String hql = "delete from Vote where uid= :uid AND pid= :pid";
          Query query = session.createQuery(hql);
          System.out.println(user.getUid() + " and pid: " + pid);
          query.setString("uid", user.getUid());
          query.setInteger("pid", pid);
          System.out.println(query.executeUpdate());
      }catch(Exception e){
Run Code Online (Sandbox Code Playgroud)

Outprint:

uid: 123 and pid: 1
Hibernate: delete from votes where uid=? and pid=?
1
Run Code Online (Sandbox Code Playgroud)

当我在SQL中直接尝试时,SQL语法正在工作.直接SQL语法:

 delete from votes where uid= '123' AND pid= 1
Run Code Online (Sandbox Code Playgroud)

制图:

<class name="package.model.Vote" table="votes">
   <id name="vid" column="vid" >
   <generator class="increment"/>
</id>
<property …
Run Code Online (Sandbox Code Playgroud)

hibernate hql hql-delete

17
推荐指数
1
解决办法
8万
查看次数

具有多列的SQL Server中的'In'子句

我有一个组件,它根据提供的密钥从数据库中检索数据.但是我希望我的java应用程序能够获取单个数据库中所有键的所有数据,以便加快操作.当我只有一个键时,我可以使用'in'子句.

在处理多个密钥时,我可以在oracle中使用下面的查询

SELECT * FROM <table_name> 
where (value_type,CODE1) IN (('I','COMM'),('I','CORE'));
Run Code Online (Sandbox Code Playgroud)

这与写作类似

SELECT * FROM <table_name> 
where value_type = 1 and CODE1 = 'COMM' 
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM <table_name> 
where value_type = 1 and CODE1 = 'CORE' 
Run Code Online (Sandbox Code Playgroud)

一起

但是,如上所述使用'in'子句的概念在'SQL server'中给出了以下错误

ERROR:An expression of non-boolean type specified in a context where a condition is expected, near ','.

请告知他们是否有任何方法可以在SQL服务器中实现相同的功能.

sql sql-server oracle

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

NHibernate System.IndexOutOfRangeException

我有一个非常简单的类,它给出了一个奇怪的错误.该类只有1个属性,查询非常简单.最棘手的部分是,这似乎是随机发生的.在收到此错误后,通常刷新页面会使其成为一种方式,应用程序不会再次出现错误.

这可能是数据库连接的问题吗?

我越来越:

[IndexOutOfRangeException: Department5_]
   System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +4839010
   System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +67
   NHibernate.Driver.NHybridDataReader.GetOrdinal(String name) +46
   NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) +87
   NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner) +62
   NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i, IEntityPersister persister, Object id, IDataReader rs, ISessionImplementor session) +213
   NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) +301
   NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +1422
   NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +114
   NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) +205

[ADOException: could not execute query …
Run Code Online (Sandbox Code Playgroud)

nhibernate

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

Linq:将扁平结构转换为分层结构

转换扁平结构的最简单,最有效的方法是什么:

object[][] rawData = new object[][] 
{ 
  { "A1", "B1", "C1" }, 
  { "A1", "B1", "C2" },
  { "A2", "B2", "C3" }, 
  { "A2", "B2", "C4" }
  // .. more 
};
Run Code Online (Sandbox Code Playgroud)

进入分层结构:

class X
{
  public X () 
  {
    Cs = new List<string>();
  }
  public string A { get; set; }
  public string B { get; set; }
  public List<string> Cs { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的

// pseudo code which describes structure:
result =
{
  new X() { …
Run Code Online (Sandbox Code Playgroud)

c# linq

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

如何在c#/ .net中对List <T>进行排序

我有一节课PropertyDetails:

public class PropertyDetails
{

     public int Sequence { get; set; }

     public int Length { get; set; }

     public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在创建一个PropertyDetailsas 列表

List<PropertyDetails> propertyDetailsList=new List<PropertyDetails>();
Run Code Online (Sandbox Code Playgroud)

我想按此排序PropertyDetails.Sequence.

Linq解决方案是受欢迎的.

c# sorting list

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