我正在尝试在选定的答案中运行代码,但无法弄明白 link text
这是我的代码:
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));
}
}
}
任何想法
答案 0 :(得分: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());
}
}
}
干杯!