实体框架.所有方法链接

e36*_*6M3 30 c# entity-framework entity-framework-4

这两种查询上下文的方式有什么区别吗?

Firm firm = base.context.Firms
            .Where(f => f.SomeId == someId)
            .Where(f => f.AnotherId == anotherId)
            .FirstOrDefault();

Firm firm = base.context.Firms
            .Where(f => f.SomeId == someId && f.AnotherId == anotherId)
            .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

似乎链接完全可以完成AND条件.我不相信你可以链接OR语句.是否有理由更喜欢一个,或者一个更好/更有效的情况?

Jus*_*ner 43

他们应该都产生相同的最终结果(如果我没有记错的话),但我找到第二个是更具可读性和更好的节目原意.


更新

我刚刚使用LINQPad验证了上述语句.事实上,这两个查询都会生成相同的SQL.

例如:

context.SomeTable.Where(c => c.ParentId == null)
                 .Where(c => c.Name.Contains("F"))
                 .Select(c => c.Name);
Run Code Online (Sandbox Code Playgroud)

生产:

SELECT [t0].[Name] 
FROM [SomeTable] AS [t0]
WHERE ([t0].[Name] LIKE @p0) AND ([t0].[ParentId] IS NULL)
Run Code Online (Sandbox Code Playgroud)

哪个是由以下产生的SQL:

context.SomeTable.Where(c => c.ParentId == null && c.Name.Contains("F"))
                 .Select(c => c.Name);
Run Code Online (Sandbox Code Playgroud)



你也可以再压缩一些东西(我觉得这个原因与上面相同):

var firm = base.context.Firms.FirstOrDefault(f => f.SomeId == someId 
                                                  && f.AnotherId == anotherId);
Run Code Online (Sandbox Code Playgroud)

  • 第一个对我来说最具可读性.您可以立即看到有两个必须匹配的独立条件,它们排列完美.当然第二个也有两个条件,但需要额外的秒才能解析出行中有一个&&. (5认同)