簡體   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