1. [代码]构造Lambda语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <summary>
/// 使之支持Sql in语法
/// </summary>
/// <typeparam name = "T"></typeparam>
/// <typeparam name = "TValue"></typeparam>
/// <param name = "query"></param>
/// <param name = "obj"></param>
/// <param name = "values"></param>
/// <returns></returns>
public
static
IQueryable<T> WhereIn<T, TValue>(
this
IQueryable<T> query, Expression<Func<T, TValue>> obj, IEnumerable<TValue> values)
{
return
query.Where(BuildWhereInExpression(obj, values));
}
private
static
Expression<Func<TElement,
bool
>> BuildWhereInExpression<TElement, TValue>(Expression<Func<TElement, TValue>> propertySelector, IEnumerable<TValue> values)
{
ParameterExpression p = propertySelector.Parameters.Single();
if
(!values.Any())
return
e =>
false
;
var
equals
= values.Select(value => (Expression)Expression.Equal(propertySelector.Body, Expression.Constant(value,
typeof
(TValue))));
var
body =
equals
.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
return
Expression.Lambda<Func<TElement,
bool
>>(body, p);
}
// 下面是调用
string
[] ids =
new
string
[]{10101,10005,10007};
db.Profile.WhereIn(c => c.Id,ids);
2. [代码]方法2(LINQ to SQL)
1
2
3
4
int
[] productList =
new
int
[] { 1, 2, 3, 4 };
var
myProducts =
from
p
in
db.Products
where
productList.Contains(p.ProductID)
select
p;
1. [代码]构造Lambda语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/// <summary>
/// 使之支持Sql in语法
/// </summary>
/// <typeparam name = "T"></typeparam>
/// <typeparam name = "TValue"></typeparam>
/// <param name = "query"></param>
/// <param name = "obj"></param>
/// <param name = "values"></param>
/// <returns></returns>
public
static
IQueryable<T> WhereIn<T, TValue>(
this
IQueryable<T> query, Expression<Func<T, TValue>> obj, IEnumerable<TValue> values)
{
return
query.Where(BuildWhereInExpression(obj, values));
}
private
static
Expression<Func<TElement,
bool
>> BuildWhereInExpression<TElement, TValue>(Expression<Func<TElement, TValue>> propertySelector, IEnumerable<TValue> values)
{
ParameterExpression p = propertySelector.Parameters.Single();
if
(!values.Any())
return
e =>
false
;
var
equals
= values.Select(value => (Expression)Expression.Equal(propertySelector.Body, Expression.Constant(value,
typeof
(TValue))));
var
body =
equals
.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
return
Expression.Lambda<Func<TElement,
bool
>>(body, p);
}
// 下面是调用
string
[] ids =
new
string
[]{10101,10005,10007};
db.Profile.WhereIn(c => c.Id,ids);
|
2. [代码]方法2(LINQ to SQL)
1
2
3
4
|
int
[] productList =
new
int
[] { 1, 2, 3, 4 };
var
myProducts =
from
p
in
db.Products
where
productList.Contains(p.ProductID)
select
p;
|