我在C#中使用Linq的前几天,我很想知道是否有更简洁的方式来编写以下内容。
MyEntities db = new MyEntities(ConnString);
var q = from a in db.TableA
join b in db.TableB
on a.SomeFieldID equals b.SomeFieldID
where (a.UserID == CurrentUser &&
b.MyField == Convert.ToInt32(MyDropDownList.SelectedValue))
select new { a, b };
if(q.Any())
{
//snip
}
我知道如果我想检查单个表的字段中是否存在值,我可以使用以下内容:
if(db.TableA.Where(u => u.UserID == CurrentUser).Any())
{
//snip
}
但是我很想知道是否有办法做lambda技术,但它能满足这两个表中第一个技术的条件。
对于任何错误或清晰感到抱歉,我会根据需要进行修改。提前谢谢。
答案 0 :(得分:2)
是的,您可以使用extension方法执行此操作。请注意,您可以通过首先过滤每个表来获得更简洁的查询,但我怀疑SQL Server无论如何都会以这种方式对其进行优化。
if (db.TableA.Where( a => a.UserID == CurrentUser )
.Join( db.TableB.Where( b => b.MyField == Convert.ToInt32(MyDDL.SelectedValue) ),
o => o.someFieldID,
i => i.someFieldID,
(o,i) => o )
.Any()) {
...
}