2010-01-12 1 views
0

I가 선택한 답변에 코드를 실행하려고하지만 그것을 알아낼 수 없습니다를 정의하는 방법을 여기에 link textLinq에 확장 메서드

내 코드입니다 :

using System; 
using System.Data; 
using System.Data.Objects; 
using System.Configuration; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Collections; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 


namespace System.Linq.IQueryable 
{ 
    static public class LinqExtensions 
    { 
     public static IQueryable<TEntity> WhereIn<TEntity, TValue> 
    (
     this ObjectQuery<TEntity> query, 
     Expression<Func<TEntity, TValue>> selector, 
     IEnumerable<TValue> collection 
    ) 
     { 
      if (selector == null) throw new ArgumentNullException("selector"); 
      if (collection == null) throw new ArgumentNullException("collection"); 
      ParameterExpression p = selector.Parameters.Single(); 

      if (!collection.Any()) return query; 

      IEnumerable<Expression> equals = collection.Select(value => 
       (Expression)Expression.Equal(selector.Body, 
        Expression.Constant(value, typeof(TValue)))); 

      Expression body = equals.Aggregate((accumulate, equal) => 
       Expression.Or(accumulate, equal)); 

      return query.Where(Expression.Lambda<Func<TEntity, bool>>(body, p)); 
     } 
    } 
} 

어떤 아이디어

답변

4

확장 프로그램을 작성한 후 자동으로 선택되지 않는 방법은 까다 롭습니다. 확장 방법을 넣는 위치에 따라 using 지시문을 추가하거나 참조를 추가 한 다음 using 지시문을 추가해야합니다.

확장 메서드가 클래스에 추가되었지만 부분 클래스라는 전통적인 방식이 아니기 때문입니다. 클래스를 확장하고 있지만, 실제로 객체 지향적 인 것은 아니므로, 혼동하기 전에 자신의 부분에서 더 많은 작업이 필요합니다.

다음은 도움이 될 것입니다

using System.Linq.IQueryable 

개인적으로 나는 "ExtensionMethods"라는 네임 스페이스로 나누는 것, 그리고 더 목적에 따라 다른 네임 스페이스로 세분화이 당신의 정신을 도움이 될 것입니다.

중첩 할 수있는 네임 스페이스 수에는 제한이 없지만 중첩 할 수있는 정적 클래스 수에는 제한이 있습니다.

코드를 호출하는 코드에서 마침표를 누르면 자동 완성 목록에 표시됩니다.

추가 도움이 필요하면 사례를 게시 할 것입니다.

예 :

Extensions.cs

using System; 

namespace Foo 
{ 
    namespace Bar 
    { 
    public static class RangeExtensions 
    { 
     public static string ToColumnLetter(this int col) 
     { 
      ... //universal notation for magic :) 
     } 
    } 
    } 
} 

Usage.cs

using System; 
using Foo.Bar; 

namespace Foo2 
{ 
    public class Bar2 
    { 
    public void ExtensionSample 
    { 
     Range range = .... 

     Console.WriteLine(range.Column.ToColumnLetter()); 
    } 
    } 
} 

건배!