Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Linq.Dynamic和Sql IN运算符_C#_Linq To Sql - Fatal编程技术网

C# System.Linq.Dynamic和Sql IN运算符

C# System.Linq.Dynamic和Sql IN运算符,c#,linq-to-sql,C#,Linq To Sql,可能重复: 我正在使用System.Linq.Dynamic库为基于GUI的查询引擎提供动力,但是我似乎找不到对Sql IN操作符的等效支持。有人用过这个吗 我已经在这里搜索并找到了一些可能的重复项,但是没有一个完全符合我的要求(或者已经解决) 澄清: 我正在使用动态查询API在Linq中构建查询,例如: var customers = dbDataContext .Clients .Where("Lastname = @0"

可能重复:

我正在使用System.Linq.Dynamic库为基于GUI的查询引擎提供动力,但是我似乎找不到对Sql IN操作符的等效支持。有人用过这个吗

我已经在这里搜索并找到了一些可能的重复项,但是没有一个完全符合我的要求(或者已经解决)

澄清:

我正在使用动态查询API在Linq中构建查询,例如:

var customers = dbDataContext
                 .Clients
                 .Where("Lastname = @0", "Smith");
这很好,我遇到的一个操作符相当于SQLIn操作符。我想这样做:

var customers = dbDataContext
                 .Clients
                 .Where("ProductIDsPurchased IN (1,6,8,90)");
但是,我不知道如何使用动态查询编写此文件(上面的操作不起作用)。

可能Stackoverflow线程可以帮助您

摘自帖子:

您可以实现自己的方法:

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));
}
就你而言:

var customers = dbDataContext
             .Clients
             .WhereIn(c=> c.LastName, new List<string>{"Smith","Wesson"});
var客户=dbDataContext
.客户
其中(c=>c.LastName,新列表{“Smith”,“Wesson”});

马科斯:你可以在一个现存的问题上创造一个赏金,而不是复制它。”Mark Byers:我确实考虑过这个问题,但是我发现的任何问题都没有问我到底是什么,你能详细说明一下吗?或者让我看看你的另一个问题?SQL In=.Any()当我使用集合的Contains方法时,我发现LINQ to SQL生成一个“In”表达式对我来说。在普通查询中使用Contains很好,但它似乎没有映射到动态查询库以获得广泛的答案和示例-我将给出一个答案。这与我所追求的方式不同,因为字段名也需要动态查看David Buchanan对此问题的方法。他使用反射来做这件事。
var customers = dbDataContext
             .Clients
             .WhereIn(c=> c.LastName, new List<string>{"Smith","Wesson"});