创建一个数组,其中包含一个数组中与C#中另一个数组中的值匹配的所有值

时间:2016-08-16 14:35:12

标签: c# lambda ienumerable

我有一个这样的数据库类:

public partial class Colour
    {
        public int ColourID { get; set; }
        public string Colour1 { get; set; }
    }

另类这样的课程:

public partial class RangeColour
{
    public int RangeColourID { get; set; }
    public Nullable<int> RangeID { get; set; }
    public Nullable<int> ColourID { get; set; }
}

和第三类这样:

public partial class Range
    {
        public int RangeID { get; set; }
        public string RangeName { get; set; }
    }

每个Range实例可以包含Colour类中的多种颜色。所有范围都是和它们的颜色在RangeColour类中相关联。

此关系建立如下:RangeID表中的RangeRangeID表中RangeColour的主键。

ColourID表中Colour的{​​{1}}方式是ColourID表中RangeColour的主键。

我在c#方法中获得了IEnumerable特定范围,如下所示:

 public class HomeController : Controller

{
    Entities db = new Entities();

    public ActionResult Product(int id)
    {         

        IEnumerable<RangeColour> colran = db.RangeColours.Where(c => c.RangeID == id);
       //other code
    }
}

现在,我已获得属于IEnumerable的所有RangeColours的{​​{1}}表colourID如何创建新的RangeID哪个IEnumerable包含Colour1表中ColourID个值的所有Colour?我确信这可以用某种lambda表达式完成。

1 个答案:

答案 0 :(得分:2)

您可以在IQueryable上使用Join扩展名来获取颜色。

IQueryable<Colour> colors = db.Colors.Join(
    db.RangeColours.Where(c => c.RangeID == item.RangeID),
    c => c.ColourID,
    r => r.ColourID,
    (c, r) => c);

然后,您可以根据需要选择Colour1字符串。如果你需要在内存中使用ToList()

colors.Select(c => c.Colour1).ToList()