2017-11-05 5 views
1

私はEF 6.0の初心者であり、使いやすいDALを設計し始めました。ここ は、各エンティティ上のすべての動作のタスクのための私のインターフェイスである:ここwhere where句と列制限をSQL Serverに送信する前にEFクエリに適用します

public interface IEntity<T> 
{ 
    T Insert(T NewItem); 
    T Update(T ModifiedItem); 
    bool Delete(T Selected); 
    bool DeleteByID(int ItemID); 
    List<T> Select(Func<T, bool> Query); 
    IQueryable<T> GetQuery(); 
} 

は、「グループ」エンティティの選択方法についての私の実装です:

public bool Select(Func<DataAccess.Model.Group, bool> Query, out List<Business.Entity.Login.LoginUser> Output) 
{ 
    IQueryable<DataAccess.Model.Group> Connection = GetQuery(); 
    Output = Connection.Where(Query).ToLoginUser().ToList(); 
    return true; 
} 

私はのFuncを使用してフィールド上の全てのレンジリミッターを受け取ることになります<、>パラメータと、私は必要としない列の一部非表示にする拡張メソッドの下に使用しています:

public static IEnumerable<BEntities.Login.LoginUser> ToLoginUser(this IEnumerable<DataAccess.Model.Group> Model) 
    { 
     return from A in Model select new Business.Entity.Login.LoginUser { Username = A.Name, Password = A.Identifier }; 
    } 

をしかし、何がactuallます

SELECT 
[Extent1].[ID] AS[ID], 
[Extent1].[Identifier] AS [Identifier], 
[Extent1].[Name] AS [Name], 
[Extent1].[ParentGroup] AS [ParentGroup], 
[Extent1].[GroupPath] AS [GroupPath] 
FROM[dbo].[Group] AS [Extent1] 

このクエリでは、「Where」句または列の制限は表示されません。 私のミスはどこですか? < ...、...>式を使用して

+0

「Func <...>」をすべて「式」に置き換えてください。 –

答えて

1

はそれのような何かに私の生成されたSQLクエリを変更:

[Extent1].[ID] AS [ID], 
[Extent1].[Identifier] AS [Identifier], 
[Extent1].[Name] AS [Name], 
[Extent1].[ParentGroup] AS [ParentGroup], 
[Extent1].[GroupPath] AS [GroupPath] 
FROM [dbo].[Group] AS [Extent1] 
WHERE N'Noei' = [Extent1].[Name] 

が、私もそれの列の一部を制限するために、モデル・マッパーを使用:

public static IEnumerable<BEntities.Login.LoginUser> ToLoginUser(this IEnumerable<DataAccess.Model.Group> Model) 
{ 
    return from A in Model select new Business.Entity.Login.LoginUser { Username = A.Name, Password = A.Identifier }; 
} 

、私はこの方法でそれを呼ばれる:

public bool Select(Expression<Func<DataAccess.Model.Group, bool>> Query, out List<Business.Entity.Login.LoginUser> Output) 
{ 
    IQueryable<DataAccess.Model.Group> Connection = GetQuery(); 
    Output = Connection.Where(Query).ToLoginUser().ToList(); 
    return true; 
} 

が、私は中列hidingsを参照してくださいすることが期待しました生成されたクエリ。