- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我编写了以下 linq 查询,它通过将数据连接在一起来创建一个新对象,如您所见:
var translations = from t in context.Translations
join token in context.Tokens on t.Guid equals token.Guid
join t2 in context.Translations on new { t.Guid, LanguageCode = "fr" } equals new { t2.Guid, t2.LanguageCode} into j //TODO: fr needs to be replaced by the language of the translators account
from j2 in j.DefaultIfEmpty()
where t.LanguageCode == String.Empty
orderby t.Text
select new TranslationView
{
Guid = t.Guid,
LanguageCode = j2.LanguageCode,
SourceText = t.Text,
Translation = j2.Text,
IsNew = j2.Text == null,
Notes = token.Notes,
Required = token.Required,
Type = (Token.TokenType)token.Type,
Location = (Token.LocationType)token.Location
};
问题是我现在正尝试使用 Rhino.Mocks 编写单元测试,它返回错误 Object reference not set to an instance of an object.
所以我现在的问题是,有没有更好的方法来编写这个查询?一种在真实情况和单元测试情况下都能正常工作的方式?
我尝试在 DefaultIfEmpty()
位中传递一个值,它使其适用于 Mock,但随后主代码失败。
编辑单元测试代码:
[Test]
public void Build_Translation_List_TwoItems_Context()
{
//Arrange: Setup context
var context = setupContext();
//Act: Pass the context through
var result = TranslationHelpers.BuildTranslationList(context, 1);
//Result
result.TranslationList.Count.ShouldEqual(2);
result.PagingInfo.TotalItems.ShouldEqual(2);
}
SetupContext 方法:
public static ITranslationContext setupContext()
{
var context = new Mock<ITranslationContext>();
context.SetupProperty(x => x.Tokens, new UnitTestHelpers.FakeDbSet<Token>
{
new Token
{
DateAdded = DateTime.Now,
Guid = Guid.Parse("f3099a43-e12d-4ea3-ba06-265fde807f03"),
LastUpdated = DateTime.Now,
Location = (short)0,
Type = (short)0,
LocationDescription = "Test 1",
Notes = "Testing 1",
Required = "Testing"
},
new Token
{
DateAdded = DateTime.Now,
Guid = Guid.Parse("7D6937D8-F7E1-4B92-934E-465683874B65"),
LastUpdated = DateTime.Now,
Location = (short)0,
Type = (short)0,
LocationDescription = "Test 3",
Notes = "Testing 3",
Required = "Testing"
},
});
context.SetupProperty(x => x.Translations, new UnitTestHelpers.FakeDbSet<Translation>
{
new Translation{Guid = Guid.Parse("f3099a43-e12d-4ea3-ba06-265fde807f03"), LanguageCode = String.Empty, Text = "Testing 1"},
new Translation{Guid = Guid.Parse("f3099a43-e12d-4ea3-ba06-265fde807f03"), LanguageCode = "fr", Text = ""},
new Translation{Guid = Guid.Parse("7D6937D8-F7E1-4B92-934E-465683874B65"), LanguageCode = String.Empty, Text = "Testing 3"},
new Translation{Guid = Guid.Parse("7D6937D8-F7E1-4B92-934E-465683874B67"), LanguageCode = "fr", Text = "Testing 4"}
});
return context.Object;
}
如有任何帮助,我们将不胜感激。
最佳答案
DefaultIfEmpty()
不会创建“默认”j2。即使 j2 为空,它也只会获取数据。
这就像一个 SQL LEFT JOIN
因此您必须测试无效性以避免 NRE。
代替
LanguageCode = j2.LanguageCode
努力去做
LanguageCode =j2 != null ? j2.LanguageCode : string.Empty // or null
关于c# - 模拟数据库上下文时如何使用 DefaultIfEmpty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558244/
我有一个 Entity Framework 模型 Schedule 映射到表 dbo.Schedule。 Schedule 中的两个字段是 hours(decimal)和 week_ending(Da
为什么在 DefaultIfEmpty 查询后数组仍然为空? class Program { static void Main(string[] args) { Pro
我有这门课: class OriginalClass { string FirstItem; List ListOfSecondItems; } 我想将一个类的列表转换为另一个类的列表,或者将
我编写了以下 linq 查询,它通过将数据连接在一起来创建一个新对象,如您所见: var translations = from t in context.Translations
您好,我正在尝试在 IQueryable 上使用 DefaultIfEmpty() 函数,它会抛出异常“不支持用于查询运算符‘DefaultIfEmpty’的重载。”这是我的代码: Dinner d
我正在寻找解决 DefaultIfEmpty() 问题的方法在 LINQ 外连接中使用时,扩展方法不获取空值。 代码如下: var SummaryLossesWithNets
有人能解释一下如何DefaultIfEmpty()可以在 LINQ 中使用。我已经准备好了一些 Material ,但仍然需要一些扎实的东西来看看它的用途。 最佳答案 如果源集合为空,它基本上返回一个
我正在使用 C#、.NET4.5、EF6(实际上应该不重要)。 我从数据库中选择一些值,然后.ToList()它们,然后添加DefaultIfEmpty(new ActualFee{Net = 0,
追踪 System.Linq.Enumerable.DefaultIfEmpty 的实现让我找到了这个方法。除了以下古怪的细节外,它看起来还不错: // System.Linq.Enumerable
好像rx-swift还没有实现DefaultIfEmpty .有没有其他方法可以模仿这种行为? let myList:[Int] = [] myList.toObservable() .swi
我在 MSDN 上看到一个示例,如果没有返回任何内容,它会让您指定默认值。见下文: List months = new List { }; int firstMonth2 = months.Defau
leftOuterJoin 的文档Query Expressions on MSDN通过样本反复暗示使用 leftOuterJoin .. on .. into .. 时您仍然必须使用 .Defaul
有人可以向我解释这里出了什么问题吗?我正在使用 Linq to Sql 创建一个非常讨厌的查询。 我遇到的问题是我需要在某些表上进行左连接(使用 DefaultIfEmpty)我需要从DefaultI
我正在构建一些 Linq 表达式并试图获取 IEnumerable.DefaultIfEmpty ( http://msdn.microsoft.com/en-us/library/bb360179.
有一组设备类型,其中一些支持配置设置。我正在尝试获取所有设备类型和任何适用设置的列表。 此查询不会选取没有 DeviceParameters 的设备。如果我添加 .DefaultIfEmpty() 如
搜索了很多之后,我找不到 F# 等效的 Enumerable.DefaultIfEmpty . F# 中是否存在类似的东西(也许以不同的惯用方式)? 最佳答案 为了保持序列的惰性,我们可以使用枚举器的
我有以下数据库结构(简化) 店铺 StoreId RateId 产品 ProductId Name 费率 RateId Name IsDefault 价格 PriceId ProductID Rate
我正在尝试使用 .DefaultIfEmpty() 语法使用具有大量左连接的 Oracle EF 框架(Oracle.ManagedDataAccess.EntityFramework nuget 包
var query = from r in list where r.Id == "" DefaultIfEmpty(String.Empty) 不起作用。 我如何编写具有查询样式的 linq 查询并
我正在尝试拉下联系人的 NULLS,我正在使用 DefaultIfEmpty 来执行此操作。但是我收到了这个错误。 “方法‘GroupJoin’不能跟在方法‘Join’之后或不受支持。尝试根据支持的方
我是一名优秀的程序员,十分优秀!