此LINQ查询应返回具有RecipeLineItem的所有食谱,其成分标题等于“巧克力”。不幸的是,我的查询只返回符合我条件的最后食谱,而不是符合我标准的所有食谱。
问题查询:
var recipesWithChocolateAsAnIngredient =
session.Query<Recipe>()
.Select(r => r)
.Where(r => r.RecipeLineItems
.Any(i => i.Ingredient.Title == "Chocolate"));
以下是我的(简化)对象:
public class Recipe
{
public string Title { get; set; }
public IList<RecipeLineItem> RecipeLineItems { get; set; }
}
public class RecipeLineItem
{
public Ingredient Ingredient { get; set; }
}
public class Ingredient
{
public string Title { get; set; }
}
感谢您提供的任何帮助。
答案 0 :(得分:1)
抱歉,问题解决了。 简短说明:LINQ查询工作正常。长解释:问题是我的NHibernate映射以及我如何重用RecipeLineItem变量将Recipe的新实例保存到我的数据库中。在我的代码中,我使用相同的“lineItem1”,“linItem2”,“lineItem3”,“lineItem4”等变量来填充我的Recipe变量'RecipeLineItems集合属性。这个问题是我的NHibernate类映射表明RecipeLineItem只有一个RecipeLineItem(与Id字段/属性相关)。由于我的“lineItem'X”变量都引用了RecipeLineItem类型的相同内存实例,当我将每个配方保存到数据库时,NHibernate使用新保存的Recipe的Recipe_ID写入先前保存的Recipe的RecipeLineItems的Recipe_Id。所以,我的查询表现得恰到好处:确实只有一个食谱带有“巧克力”RecipeLineItem。它始终是我的食谱测试列表中的最后一个食谱,因为这是覆盖之前食谱的订单项的最后一个食谱。对不起,我不能再简洁地说出来了。我希望它可以帮助其他遇到类似问题的人。