簡體   English   中英

C#/ LINQ - 用LINQ查詢數據庫時遇到問題

[英]C# / LINQ - having trouble querying database with LINQ

我有一個包含兩個實體A和B的數據庫.A和B之間有多對多的關系(還有一個AB表也是為了實現這一點而自動創建的)。 A有A_prop(鍵),B有B_prop(鍵)。

我想,在給定一個特定的B_prop的情況下,找到所有與B的關系中的A,(稱為Ayes和Bees為各自的導航屬性),B與特定的B_prop。

所以我有這個代碼:

public class Repository
{
    private ABEntities entities = new ABEntities();

    public IQueryable<A> FindAllA(string b_prop)
    {
        return from b in entities.Bs
        where b.B_prop == b_prop
        select b.Ayes;
    }
}

這里的返回類型不匹配。 我真正想要的是有一個A的列表,或類似的東西,我可以用以下方式:

List<A> listofa = repository.FindAllA("some string");
foreach (A a in listofa)
{
    // Do my stuff here.
}

編輯:

謝謝你的回復。 這是我的問題的解決方案(測試):

public List<A> FindAllA(string b_prop)
{
    return (from b in entities.Bs
            where b.B_prop == b_prop
            select b.Ayes).First().ToList();
}
public class Repository {

        private ABEntities entities = new ABEntities();

        public IList<A> FindAllA(string b_prop)
        {
            return (from b in entities.Bs
                   where b.B_prop == b_prop
                   select b.Ayes).ToList();
        }
    }

我強烈建議您不要從存儲庫返回可查詢的內容,因為每個可查詢的實現都不同(linq / entities / sql / etc)

不要在初始子集上調用.First ,而是考慮使用SelectMany來展平結果集:

public List<A> FindAllA(string b_prop) 
{ 
    return (from b in entities.Bs 
            where b.B_prop == b_prop
            from a in b.Ayes
            select a).ToList(); 
} 

這樣,如果由於某種原因你在Bs表中有多個匹配的記錄,那么將返回所有相關的As,而不僅僅是第一個匹配到你的第一個B結果的集合。 第一次嘗試的問題是您返回IQueryable<EntitySet<Ayes>>而不是IQueryable<Ayes> SelectMany這種關系SelectMany了。

LINQ查詢通常返回iQueryable<type> 您可以通過執行以下操作將其轉換為列表:

        return (from b in entities.Bs
               where b.B_prop == b_prop
               select b.Ayes).ToList();

在你的功能。

你有一個IQueryable,而另一個不匹配Just return List<A>應該有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM