LINQ to NHibernate查询仅返回最后一个匹配项,而不是所有匹配项

时间:2014-08-11 15:04:09

标签: c# linq linq-to-nhibernate

此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; }
}

感谢您提供的任何帮助。

1 个答案:

答案 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。它始终是我的食谱测试列表中的最后一个食谱,因为这是覆盖之前食谱的订单项的最后一个食谱。对不起,我不能再简洁地说出来了。我希望它可以帮助其他遇到类似问题的人。