我在下面的链接中看到了动态linq: ScottGu
我想使用此方法选择这样的动态查询:
我有一个复杂的选择,这种方式无法解决我的问题, 这是我的选择:
Select sUserName,sname, sFamily,sMobail,sid,sNumberSt,sActive,sPic,sDate from Student where {0} order by sid desc";
{0}是一个复杂的条件:
sname like %somthing% and susername=N'something' and sid in (select sidfk from tablex where userteacher=N'name1')
并将此条件传递给方法。 我必须说: 我不知道我的情况,我的条件是用户搜索params指定的。这个条件我说,这只是我想要做的一个例子。
我该怎么做?
答案 0 :(得分:1)
解决我问题的唯一方法:
我发送两个参数而不是一个参数,一个用于学生,一个用于tablex:
var az = db.tablex.Where(p => p.userteacher== name1)
.Select(p => p.sidfk).ToList();
var query = db.Students.Where(textSearch).Where(s=>az.Contains(s.sid)).OrderByDescending(s => s.sid)
.Select(s => new
{
s.sUserName,
s.sname,
s.sFamily,
s.sMobail,
s.sid,
s.sNumberSt,
s.sActive,
s.sPic,
s.sDate,
});
wiche textSearch是:
sname like %somthing% and susername=N'something'
使用动态linq
是否存在更好的方式?
答案 1 :(得分:0)
在这种情况下,您无需使用动态linq。
string paramA = "", paramB = "";
var query = from x in context.table1
where x.name == paramA
where context.table2.Where(y => y.field1 == paramB).Any(y => y.id == x.id)
select x;
答案 2 :(得分:0)
动态Linq通常在查询中使用if你不知道将使用哪个字段,所以在你的样本中你只使用params作为字段的条件,所以你不需要动态linq
你可以很少优化你这样的查询
var query = from student in db.Students
join teacher in db.tablex on student.sid equals teacher.sidfk
where student.sname.Contains('somthing') &&
susername=='something' &&
teacher.userteacher=='name1'
orderby s.sid descending
select new
{
s.sUserName,
s.sname,
s.sFamily,
s.sMobail,
s.sid,
s.sNumberSt,
s.sActive,
s.sPic,
s.sDate,
};