出于好奇:使用以下扩展方法对一堆对象进行排序时使用了什么比较器?
OrderBy(x=> x)
Run Code Online (Sandbox Code Playgroud)
背景:我必须检查两个 ISet< T > 实例是否包含相同的元素并考虑使用
bool setsEqual = MySet.SequenceEqual(OtherSet);
Run Code Online (Sandbox Code Playgroud)
方法。由于集合中包含的那些元素的顺序未定义并且可能不同,因此在内部顺序不相同的情况下,SequenceEqual 将失败。所以我必须明确定义一个订单。由于顺序算法本身是完全不相关的,只要它是稳定的,我只是使用了一个“身份”lambda 表达式:
bool setsEqual = MySet.OrderBy(x => x).SequenceEqual(OtherSet.OrderBy(x => x);
Run Code Online (Sandbox Code Playgroud)
但是“比较对象本身”对代码意味着什么?由于此 OrderBy 扩展方法是通用方法,因此必须有一个默认的比较算法,该算法能够在不了解更多信息的情况下对对象进行排序,这意味着必须将排序比较委托给集合的类型元素本身。是否有元素类型必须支持的接口,或者是否有默认比较器(可能正在比较对象的内部内存地址)?
我在C#中使用Rhino Mocks 3.6并且在模拟对象而不是接口时遇到问题.有人可以解释为什么在定义期望时实际调用方法?
public class MockingBird
{
public void TestMethod()
{
throw new Exception("Method call!");
}
}
Run Code Online (Sandbox Code Playgroud)
...
[TestMethod]
public void TestMock()
{
var mockedMockingBird = MockRepository.GenerateStrictMock<MockingBird>();
mockedMockingBird.Expect(x => x.TestMethod());
}
Run Code Online (Sandbox Code Playgroud) 在DB2 LUW 9.7数据库上使用FluentNhibernate 1.3.0.0,NHibernate 3.3.1.4000.
我想从一个表/实体中获取一些不同的数据.在SQL中,很简单:
select distinct Corporation, CalculationDate, ValuationRule
from MySchema.MyTable
where State == 0
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试使用Linq获取这些数据,但它无法正常工作......
首先尝试使用select:
var result = Session.Query<MyEntity>()
.Where( x => x.State == State.Pending)
.Select(
x =>
new
{
Corporation = x.Corporation,
CalculationDate = x.CalculationDate,
ValuationRule = x.ValuationRule,
}).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
产生的异常:此SelectClauseVisitor不支持表达式类型'NhDistinctExpression'.
第二次尝试,使用Groupby并只获取密钥:
var result = Session.Query<MyEntity>()
.Where( x => x.State == State.Pending)
.GroupBy(
x =>
new
{
Corporation = x.Corporation,
CalculationDate = x.CalculationDate,
ValuationRule = x.ValuationRule,
}).Select( x => x.Key).ToList();
Run Code Online (Sandbox Code Playgroud)
结果异常:"无法执行查询".抱怨选择术语中所述的group by子句中缺少的另一个字段"Model".这让我很困惑,因为表中存在指定的字段,但我不想在该用例中使用该字段...
我错过了什么?