我正從我的BusinessLogic方法返回List,其中Type是由Linq2Sql類生成的類之一。現在,如果我使用連接語句並從不同表中獲取包含屬性(列)的結果,那麼我的返回對象應該是一個列表<>什麼?當使用JOIN時從LINQ到SQL類返回什麼類
我使用Telerik的asp.net ajax組件,並將RadGrid的數據源設置爲List。
我是使用linq2sql類的新手。提前致謝。
我正從我的BusinessLogic方法返回List,其中Type是由Linq2Sql類生成的類之一。現在,如果我使用連接語句並從不同表中獲取包含屬性(列)的結果,那麼我的返回對象應該是一個列表<>什麼?當使用JOIN時從LINQ到SQL類返回什麼類
我使用Telerik的asp.net ajax組件,並將RadGrid的數據源設置爲List。
我是使用linq2sql類的新手。提前致謝。
您可以創建其中有你想要的屬性一個新的類,然後當你做。選擇
List<MyClass> list = ... .Select(d => new MyClass() { Prop1 = d.P1...etc }).ToList()
然後你就可以使用該列表綁定到你的管制
這是一個通用對象,所以你可以做(聲明變量時):
List<object> obj = from u in db.Users ...
// or
var obj = from u in db.Users ...
這將是匿名類型的List
。我將創建一個具有包含您要加入的表對象的屬性的類,然後返回這些類的List
。
您可以創建一個只包含組件所需的屬性的特定模型類,或者更好的方法是使用匿名類。
radGrid.DataSource = joinQuery.Select(j => new { j.Name, j.Price, j.Quantity, .. });
使用匿名類型意味着當您將該對象輸出到頁面時,該對象不能被強制鍵入。我猜如果這不是必需的,那麼var就沒事了,但這意味着使用Eval(「P1」)......這不是那麼好 – Paul 2009-12-21 14:39:47
您可以返回一個匿名對象:
select x from db.Table1
join y in db.Table2
where x.Table2Id equals y.Table2Id
select new
{
Value1 = x.Value1,
Value2 = y.Value2
};
或者推出自己的實體類:
class JoinedTableEntity
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
select x from db.Table1
join y in db.Table2
where x.Table2Id equals y.Table2Id
select new JoinedTableEntity
{
Value1 = x.Value1,
Value2 = y.Value2
};
第二種解決方案是更容易,如果你傳遞有用數據超出了查詢方法的範圍,因爲識別匿名對象很困難,而且如果沒有反射,您將無法訪問其屬性。
如果您只是將數據傳遞給網格或使用反射來顯示數據的東西,那麼匿名對象就足夠了。
只需創建一個新的類模型來保存數據,因爲它將是兩個類的混合。
var exp = (
from o in this.reposOrders.All()
join c in this.reposCustomers.All() on o.CustomerID equals c.CustomerID
where o.OrderID == id
select new CustomerOrderItem()
{
OrderID= o.OrderID,
CustomerID = c.CustomerID,
ItemName = o.ItemName,
BillingAddress = c.BillingAddress
}
).Single();
return exp;
public class CustomerOrderItem(){
public int OrderItem { get; set;}
public int CustomerID { get; set;}
public string ItemName { get; set;}
public string BillingAddress { get; set;}
}
還有,你需要知道在這種情況下三種不同的選擇:
您*可以*使用var(或對象),但是在輸出時無法強制鍵入對象 – Paul 2009-12-21 14:37:26
@IP:該變量仍然是強類型的。 'var'關鍵字只告訴編譯器推斷表達式的返回類型。但在這種情況下'obj'仍然是強類型的。 – 2009-12-21 15:16:32