[英]Having trouble writing LINQ to SQL Query while storing database data into C# object classes
[英]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.