我有一個LINQ to SQL類,我們將其稱爲Test
,我希望能夠通過LINQ查詢訪問屬性,但我得到着名的「No Supported Translation to SQL「運行時錯誤。我對概念問題感興趣。這裏是我的簡單類:Linq to SQL表達式屬性可轉換爲SQL
public class Test
{
public int ID {get; set;} // Stored in Database
public int NonForeignKeyValue {get; set;} // Stored in Database
}
這裏是有點什麼,我試圖完成一個例子,但我不希望總是明確地寫在LINQ的加入開銷:
var db = (new DataContext()).GetTable<Test>();
var q = (from t in db.GetTable<Test>()
join o in db.GetTable<OtherTable>() on o.ID equals t.ID
where t.OtherStuff
select t)
我希望能夠將屬性添加到Test
,告訴我是否有任何OtherTable
行可與Test
被連接:
public bool IsInOtherTable
{
get
{
return (new DataContext())
.GetTable<OtherTabke>()
.Any(x => x.NonForeignKeyValue == this.NonForeignKeyValue));
}
}
最終這就是我想讓我的代碼看起來像,但它錯誤。我基本上要返回包含一些數據庫計算的值的所有條目:
using (DataContext db = new DataContext())
{
var q = db.GetTable<Test>()
.Where(x => x.IsInOtherTable && x.OtherStuff); //Error
}
基本上,我試圖挽救自己從編寫這些代碼每一次我要檢查,如果測試有另一個表中的某些信息。我對我描述的確切問題並不感興趣,我更關心如何在概念上將連接部分添加到SQL中,並仍然使用LINQ。我猜我使用Linq.Expression,但我真的不知道,我不知道如何去做。另外,我可以寫出實際的SQL,因爲它並不那麼複雜,但我想知道如何解決這個問題並仍然使用LINQ。
編輯:我試過這個屬性,但我得到了同樣的錯誤。它更復雜,只是改變返回類型表達...
public System.Linq.Expressions.Expression<Func<Article3, bool>> Exists
{
get
{
using (DataContext db = new DataContext())
{
return i => db.GetTable<OtherTable>()
.Any(x => x.NonForeignKeyValue == i.NonForeignKeyValue));
}
}
}
對於初學者你想一起使用的所有查詢必須使用相同的數據上下文 – BrokenGlass
使用(...)塊嵌套到只有一個使用(...)塊嵌套嗎?這是如何運作的? – Mark