是否有"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) 我是DDD + TDD世界的新手.但我已经编程了将近9年.
有人可以解释我坚持不懈的好处吗?典型的nHibernate应用程序只是将类和数据库之间的依赖关系推送到映射文件.
如果我更改类文件或数据库,我必须更改映射文件.那么是不是只是通过添加一个抽象层来推动依赖?在我看来,到目前为止,我认为这不是革命性的.但我不确定我是否遗漏了什么.
最后,我如何测试映射文件?映射文件中可能会出现错误,我该如何测试它们?
我正在开发一个使用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#3.0的功能,但其他人坚持使用经典技术.
有些人从不使用Linq,认为lambda表达式令人困惑,而且收益率是"可怕的".有时他们很难理解使用所有新功能的人编写的代码.我们可以说他们不掌握语言并且应该学习它.
但是,学习现代编程语言有多难?每个人都可以解决问题,每个人每天都要解决许多其他问题,而不是关心实施它的更好方法.培训人员不是免费的.另一方面,语言功能可以提高人们的工作效率,使代码更易于维护.
可能不完整的C#功能列表
版本4即将推出,包括许多其他功能.
就个人而言,我几乎喜欢C#的所有功能,并喜欢用这种语言编写的简短代码.但我不必从头学习它.
我对您的意见以及您在学习或教授C#方面的经验感兴趣.是否有太多功能?还缺少重要的功能吗?语言功能是否使语言更易于使用或更难学?
请:没有答案像"语言A比语言B更好,因为......".
我在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) 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) 我有一个组件,它根据提供的密钥从数据库中检索数据.但是我希望我的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服务器中实现相同的功能.
我有一个非常简单的类,它给出了一个奇怪的错误.该类只有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) 转换扁平结构的最简单,最有效的方法是什么:
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) 我有一节课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# ×6
.net ×2
linq ×2
nhibernate ×2
foreach ×1
hibernate ×1
hql ×1
hql-delete ×1
lambda ×1
list ×1
oracle ×1
proxy ×1
sorting ×1
sql ×1
sql-server ×1