将LINQ var传递给base add方法C#

时间:2011-06-13 01:35:29

标签: c# .net linq linq-to-sql linq-to-entities

我正在为我的网页创建一个DAL图层,我第一次使用LINQ。

目前我有一个名为CargoTypeCollection的类,它运行如下查询:

   AHDBDataContext db = new AHDBDataContext();

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

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

原因是这样我可以有不同的方法做不同的事情,但我不需要重复代码。 Base add class类似于:

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)
      }
}

(不介意我没有切割和粘贴的几个错字)

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

3 个答案:

答案 0 :(得分:2)

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

存储库虽然是一个很深入的主题,但并不是说将它与泛型一起使用。所以我建议你寻找一些参考文章来开始。例如,您可能希望阅读本文,以了解generic repository的含义。

答案 1 :(得分:1)

试试这个:

protected void baseAdd(IQueryable<CargoType> cargoTypes)

下面的代码会将CargoTypes设置为IQueryable<T>,其中T是“db.cargoTypes”元素的类型。

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

答案 2 :(得分:0)

您可以使用动态,例如

protected void baseAdd(dynamic CargoTypes)