【问题标题】:Help with Linq to Entities query帮助 Linq to Entity 查询
【发布时间】:2011-08-28 11:54:09
【问题描述】:

我正在尝试增加我对 linq 的了解,因此我想在不使用存储过程的情况下创建以下查询,但我不确定如何构建它。

如果我有三个表/实体:

农民(FarmerId、BusinessTitle)

Produce(ProduceId、ProduceTitle)

FarmerProduce(FarmerId,ProduceId)

我将如何在 BusinessTitle 和 ProduceTitle 中搜索特定单词(例如 Raspberry)并返回 Farmer 实体列表。

我可以分别实现对任一农产品农民的搜索,例如:

var query = (from f in farmer
            where f.BusinessTitle.Contains("raspberry")
            select l).ToList();

var query = (from fp in FarmerProduce
            where fp.Produce.ProduceTitle.Contains("raspberry")
            select fp.Farmer).ToList();  

但我不确定如何将 FarmerProduce“查找表”组合到单个查询中。

【问题讨论】:

    标签: .net entity-framework c#-4.0 linq-to-entities


    【解决方案1】:

    从外观上看,这应该是 linq 中的简单 OR。

    var query = (from fp in FarmerProduce
                where fp.Produce.ProduceTitle.Contains("raspberry")
                || fp.Farmer.BusinessTitle.Contains("raspberry")
                select fp.Farmer).Distinct().ToList();
    

    添加了不同的。

    【讨论】:

    • 大声笑是的,实际上这也有效,我显然有一个心理空白,因为这是我通常做的并且是合乎逻辑的答案 - 抱歉,我将另一个标记为正确,但要么工作。我想因为我只使用农民来修改原始查询,所以我没有考虑切换到在 FarmerProduce 上进行查询。
    【解决方案2】:

    如果您只需要农民:

    var query = from f in farmer
                where f.BusinessTitle.Contains("raspberry") 
                      || f.Produces.Any(p => p.ProduceTitle.Contains("raspberry"))
                select f;
    

    假设多对多是作为Producesnavigation 属性导入的。

    【讨论】:

    • 不错!感谢您的快速响应。顺便说一句,我认为 f.Produces.Any 应该是 f.FarmerProduce.Any(这是我必须做的才能编译它)
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多