小编Ali*_*Ali的帖子

使用Entity框架的sql IN子句的动态linq查询表达式树

我想为EF 6.0中的sql IN子句创建一个动态linq表达式,代码为第一个approch.请注意,我是Expressions的新手.我想要的是

select * from Courses where CourseId in (1, 2, 3, 4)
//CourseId is integer
Run Code Online (Sandbox Code Playgroud)

正常的linq查询看起来像这样.但我想动态查询它

string[] ids = new string[]{"1", "2", "3", "4"};
var courselist = DBEntities.Courses.Where(c => ids.Contains(SqlFunctions.StringConvert((decimal?)c.CourseId)))
Run Code Online (Sandbox Code Playgroud)

有两种方法可以进行动态表达.
1)一种方法是遍历id并创建表达式
下面的代码将在调试视图中创建以下表达式

{f => ((StringConvert(Convert(f.CourseId)).Equals("23") Or StringConvert(Convert(f.CourseId)).Equals("2")) Or StringConvert(Convert(f.CourseId)).Equals("1"))}
Run Code Online (Sandbox Code Playgroud)

动态表达是

var param = Expression.Parameters(typeof(Course), "f")
MemberExpression property = Expression.PropertyOrField(param, "CourseId");                   
MethodInfo mi = null;
MethodCallExpression mce = null;
if (property.Type == typeof(int))
{
   var castProperty = Expression.Convert(property, typeof(double?));
   var t = Expression.Parameter(typeof(SqlFunctions), "SqlFunctions");
   mi = typeof(SqlFunctions).GetMethod("StringConvert", new …
Run Code Online (Sandbox Code Playgroud)

c# linq expression dynamic in-clause

8
推荐指数
1
解决办法
5606
查看次数

查找公共子集的算法

我有N个数量的集合S i,每个都有不同的大小.设m 1,m 2,... m n为各组的大小(m i = | S i |),M为最大组的大小.我必须找到至少有两个数字的公共子集.例:

Set  Items
1    10,80,22
2    72, 10, 80, 26,50
3    80,
4    10, 22
5    22, 72, 10, 80, 26,50
Run Code Online (Sandbox Code Playgroud)

所以结果就是这样

Items                Found in sets
10, 22               1, 4
10, 80               1, 2, 5
10, 80, 22           1, 5
10, 72, 80, 26, 50   2, 5
Run Code Online (Sandbox Code Playgroud)

那么如何自动化这个问题以及各个解决方案的预期复杂性是多少?我需要它尽可能快.

algorithm

6
推荐指数
2
解决办法
1951
查看次数

标签 统计

algorithm ×1

c# ×1

dynamic ×1

expression ×1

in-clause ×1

linq ×1