Linq - 有没有办法从linq的几个片段中建立一个linq语句

Mar*_*son 2 .net c# linq

我有几种方法使用类似的linq语句但不同的方法使它们在自己的方法中.所以说,为了争论,我有以下linq片段,它在所有方法中重复(真正的片段会比这长得多):

        where su.ObjId == serviceUserId
        where cl.StaffMemberId == staffMemberId
Run Code Online (Sandbox Code Playgroud)

如果我在SQL中工作,我可以按如下方式连接重复的SQL:

private string GetRepeatedSql()
{
 return "where su.ObjId = serviceUserId and cl.StaffMemberId = staffMemberId";
}

private void DoSomething()
{
 string mySql = "Select * from ...... lots of sql .." + GetRepeatedSql() + ".. some more sql";
}
Run Code Online (Sandbox Code Playgroud)

(关于连接SQL字符串的常见健康警告一并注明).

Linq有同等的东西吗?我不得不在几个地方做出改变 - 这似乎违反了DRY原则.

谢谢!

Gag*_*age 5

如果我错了,请纠正我,但我一直认为LINQ语句在您实际使用之前不会被执行.(从LINQ到NHibernate)

如果确实如此,您只需添加现有语句所需的内容即可.例如:

var temp=from x in Sometable select x;
Run Code Online (Sandbox Code Playgroud)

然后添加一个where子句:

temp = from x in temp where x.ID==1234 select x;
Run Code Online (Sandbox Code Playgroud)

然后订购

temp=from x in temp order by x.ID select x;
Run Code Online (Sandbox Code Playgroud)

我不会撒谎我从来没有这样做过,但我认为它应该有效.如果有人知道这不起作用请解释原因.谢谢.

在msdn上找到了这个:http://msdn.microsoft.com/en-us/library/bb397906.aspx

在LINQ中,查询的执行与查询本身不同; 换句话说,仅仅通过创建查询变量就没有检索到任何数据.

因此,通过创建变量,您还没有检索到任何数据.虽然我上面这样做可能会返回数据,因为我正在调用from x in temp更改查询.