我正从我的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