繁体   English   中英

Linq查询投影ID不是名字

[英]Linq query projecting Id's not names

我有一个简单的设置。

FRUIT Table
Id     Name
1      Gala Apples
2      Navel Oranges
3      Peach
4      Mandarin Oranges
5      Kiwi
6      Fuji Apples

INTERSECT TABLE
FruitId     CrossRefFruitId
  1              6
  2              4

因此,如果用户正在看Gala苹果(1),他们可能也会对Fuji苹果(6)感兴趣。

我有一个返回水果的简单模型

Model
public class FruitCategory
{
    public int Id { get; set; }
    public string FruitName { get; set; }
}

EF:
public IEnumerable<FruitCategory> GetFruitbyId(int id)
{
  return _context.FruitTable.Where(q => q.FruitId == id);
}

效果很好,但现在我也想添加“ SeeAlso”水果。 因此,我在模型中创建了一个crossref模态和一个新字段。

CrossReff Model
public class FruitCrossRef
{
    public int Id { get; set; }
    public string CrossRefName { get; set; }
}

Model
public class FruitCategory
{
    public int Id { get; set; }
    public string FruitName { get; set; }
    public List<FruitCrossRef> SeeAlsoFruits {get; set;}
}

现在我遇到了困难。...如何获得将填充此模型的LINQ投影。

由于我不知道该怎么写,因此我打开LINQPAD并开始黑客和谷歌搜索。

到目前为止,这是我想出的,但是它在相交表中返回了匹配 ID,但我要返回的是水果表中的CrossReferenced ID和FruitName。

var seeAlso =
(from frt in FruitTable
where frt.Id == 1
select frt.Id)
.Intersect
(from frtCross in IntersectTable
select frtCross.FruitId);

seeAlso.Dump();

现在,我看到了一条路径,可以通过执行几个循环来获取seesee引用,然后为每个循环返回Fruit表并获取该记录来完成工作……但是似乎应该有一种方法可以利用关系的力量并投射出我完全填充的模型???


代码更正

对于可能遇到此问题的其他任何人,答案中都有一些语法错误,但答案仍然正是我想要的。

var seeAlso =
  (from frt in FruitTable
    join intsec in IntersectionTable
    on frt.Id equals intsec.CrossRefFruitId
    where intsec.FruitId == 1
    select frt);

seeAlso.Dump();

记住,这是为Linq Pad编写的,需要对生产代码进行更多调整。

您最终想要的是一个FruitItems列表,考虑到水果Id,这些列表也基于其他一些水果而引起关注。 因此,您应该选择与该ID联接到“交集”表的“水果”,而不是选择与所需ID相对应的水果。 例如。

var seeAlso =
    (from frt in FruitTable
     join intsec in IntersectionTable
        on frt.Id = intsec.CrossRefFruitId
     where intsec.FruitId == 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM