2011-06-13 86 views
1

我正在为我的网页创建DAL图层,并且第一次使用LINQ。将LINQ var传递给base添加方法C#

此刻我有一个叫CargoTypeCollection类,它就像一条流淌的查询:

AHDBDataContext db = new AHDBDataContext(); 

    var CargoTypes = from cargoTypes in db.cargoTypes 
         select cargoTypes; 

现在我想将CargoTypes变量传递给我的基地添加类(这只是CargoTypeCollections从继承)

原因是这样我可以有不同的方法做不同的事情,但我不需要重复代码。 基地添加类看起来是这样的:

protected void baseAdd(var CargoTypes) 
{ 
    foreach (var cargo in CargoTypes) 
    { 
     CargoTypeEntity cargo = new CargoTypeEntity(); 
     cargo.CargoTypeID = cargo.CargoTypeId; 
     cargo.CargoName = cargo.CargoName; 
     CargoTypes.Add(Cargo) 
     } 
} 

(不介意少数typoes我没有剪切和粘贴)

但显然,这并不工作,因为我不能在方法签名中使用VAR。

回答

0

您可以使用动态(例如,

protected void baseAdd(dynamic CargoTypes) 
1

试试这个:

protected void baseAdd(IQueryable<CargoType> cargoTypes) 

下面的代码将设置CargoTypesIQueryable<T>,其中T是你的 'db.cargoTypes' 元素的类型。

var CargoTypes = from cargoTypes in db.cargoTypes 
       select cargoTypes; 
+0

IEnumerable在这种方法更好 – Dani 2011-06-13 01:39:19

+0

删除评论 – Michael 2011-06-13 01:41:41

+0

我真的不知道什么类型的db.CargoTypes会是什么?它只是我的数据库中的一张桌子。 – Michael 2011-06-13 01:47:37

2

您可以尝试使用通用仓库泛型将解决您希望跨多种类型重用相同逻辑的问题。另一方面,存储库是向DAL提供额外提取的好方法。通过将泛型与存储库相结合,您可以实现可跨多种类型重用的DAL,而无需为每种类型编写类似的代码。

存储库是一个很深的话题,但不要说它与泛型一起使用。所以我建议你寻找一些参考文章开始。例如,您可能想阅读这篇文章,以了解generic repository是什么样的。