2013-05-28 36 views
1

我想从类别列表中选择它与使用linq的项目列表的类别类型相匹配。 IE中,从所有FIGstationeryCategories的列表中,只选择FiGStationeryType与已经过滤的列表中的类别匹配的列表。下面列出了这些型号。Linq - 如何创建另一个表中包含的类别列表

public class FIGstationeryType 
{ 
    public int Id { get; set; } 
    public virtual FIGstationeryCategory Category { get; set; } 
    public virtual FIGcompany Company { get; set; } 
    public decimal Height { get; set; } 
    public decimal Width { get; set; } 
    public virtual FIGstationeryType Template { get; set; } 
    public bool DoubleSided { get; set; } 
} 

public class FIGstationeryCategory 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal MaxZoom { get; set; } 
    public ICollection<FIGstationeryType> StationeryItems { get; set; } 
} 

我一直在这个圈子里走过,任何帮助将不胜感激。我没有很远!代码的第一行工作正常,这是我挣扎的第二行。

var listOfItems = db.StationeryTypes 
      .Where(C => C.Company.Users.Any(u => u.UserId == WebSecurity.CurrentUserId)) 
      .ToList(); 

     var categoryList = db.StationeryCategories 
      .Where(listOfItems 

任何帮助将不胜感激。

回答

1
var listOfCategories = 
(from o in listOfItems select o.Category.Name).Distinct().ToList(); 

当我想过这个问题(看3小时LINQ视频经过昨晚),我意识到LISTOFITEMS已持有所有这一切在哪里使用的类别,所以我并不需要查询和比较两张表格,只是从我已经有的列表中绘制出相关的值。

+0

呵呵有时它会在明显变得明显之前需要大量的头撞墙。 –

0

我不完全相信你要如何选择类别,但是这可能进入一个小方法:

var categoryList = db.StationeryCategories 
    .*Select*(x => listOfItems.Where(y => y.Category == x) 
    .FirstOrDefault()); 

你能澄清,如果这是你所追求的标准是什么?

+0

只从db.stationerycategories表中选择行,其中listOfItems列表中至少有一个项目包含与该行相同的信纸值。 (我希望这更好理解) 我试过你的代码,并得到一个无法转换方法组在哪里非委托类型布尔错误。 –

+0

对不起,我没有vs环境测试,但我认为你需要一个'Select'(或者'SelectMany')而不是'Where'开头。也许别人会在这里看看,并纠正我的LINQ,使其按照您指定的方式工作,但稍后我会回头看看,当我有一个IDE来测试它。 –

+1

感谢您花时间看我的问题。我已经用这种方式自己回答了:var listOfCategories =(从listOfItems中的o选择o.Category.Name).Distinct()。ToList();你的选择是对的。 –

相关问题