【问题标题】:Possible to add a condition for linked table fields in LINQ可以在 LINQ 中为链接表字段添加条件
【发布时间】:2018-05-18 07:02:23
【问题描述】:

有人可以建议我在 linq 中为引用表项添加条件的解决方案吗?

我有一个名为 TourPackage 的主表,其中包括

public class TourPackage{
   public int TourID { get; set; }
   public string TourName { get; set; }
   public List<IncludedItems> IncludedItems { get; set; }
}

每个旅游套餐都包含一些选定的项目参考,例如

public class IncludedItems {
   public int TourID { get; set; }
   public int IncludedID { get; set; }
   public Included Included { get; set; }
}

所有包含的项目都应具有对包含表的引用以供查找参考

public class Included {
   public int IncludedID { get; set; }
   public string IncludedValue { get; set; }
}

现在我已经设置了像 [1,2,3] 这样的 IncludedID,是否可以根据 IncludedID 过滤 TourPackage。

提前致谢

【问题讨论】:

    标签: c# linq linq-to-sql entity-framework-6


    【解决方案1】:

    您可以使用以下代码

    我有包含 ID 的示例数组(即 example),我们检查当前 ID(即 ele.Included.IncludedID)是否存在于 id 的数组中。

    listex.Where(x => x.IncludedItems.Any(ele => example.Contains(ele.Included.IncludedID))).ToList();
    

    样本:-

    int[] example = new int[3];
    example[0] = 123;
    example[1] = 456;
    example[2] = 789;
    
    List<TourPackage> listex = new List<TourPackage>();
    List<TourPackage> filterList = listex.Where(x => x.IncludedItems.Any(ele => example.Contains(ele.Included.IncludedID))).ToList();
    

    【讨论】:

      【解决方案2】:

      您是否尝试过使用类似的东西:

      var myIds = new List<int> {123,456};
      var result = context.TourPackages
          .Where(x => x.IncludedItems.Any(a => a.Included !=null && myIds.Contains(a.Included.IncludedId)))
          .ToList();
      

      您可能需要手动添加一些关系,具体取决于您是否设置了延迟加载。

      更多信息https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

      【讨论】:

      • 感谢您的选择。我不能这样尝试'x => x.Included.IncludedId == 123'。因为我有一个很大的列表 IncludedId 要编译。不像 123,它是一个数组 [123,456,789,455]
      猜你喜欢
      • 2023-04-06
      • 2011-01-20
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多