在LINQ使用“OfType”(Using “OfType” in LINQ)

2019-07-30 05:23发布

我从BankAccount类派生两个类 - FixedBankAccount和SavingsBankAccount。 这是工作基础上“TPH(表每一个分层)”与LINQ到SQL。

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.BankAccount")]
[InheritanceMapping(Code = "Fixed", Type = typeof(FixedBankAccount), IsDefault = true)]
[InheritanceMapping(Code = "Savings", Type = typeof(SavingsBankAccount))]
public abstract partial class BankAccount : INotifyPropertyChanging, INotifyPropertyChanged

我需要实现的方法GetAllAccountsOfType将返回所有SavingsBankAccount(如果传递的类型是SavingsBankAccount)或FixedBankAccounts(如果传递的类型是FixedBankAccount)。 我得到的错误:

类型或命名空间名称“PARAM”找不到”

用下面的代码(其使用上LINQ查询“OfType”)

我们怎样才能使它的工作?

库:

namespace RepositoryLayer
{    
    public class LijosSimpleBankRepository : ILijosBankRepository
    {
        public System.Data.Linq.DataContext Context { get; set; }

        public virtual List<DBML_Project.BankAccount> GetAllAccountsOfType(DBML_Project.BankAccount param)
        {
            var query = from p in Context.GetTable<DBML_Project.BankAccount>().OfType<param>()
                        select p;
        }
    }
}

Answer 1:

宣言:

public IEnumerable<T> GetAllAccounts<T>()
    where T : BankAccount // T must inherit class BankAccount, like your two sub-classes do
{
    return Context.GetTable<DBML_Project.BankAccount>().OfType<T>();
}

用法:

var allSaving = GetAllAccounts<SavingsBankAccount>();
var allFixed = GetAllAccounts<FixedBankAccount>();


文章来源: Using “OfType” in LINQ