我们正在研究日志查看器.该用户可以选择按用户,严重程度等进行过滤.在Sql中我会添加到查询字符串,但我想用Linq来做.我怎样才能有条件地添加where-clause?
我有一个实体框架模型,我有一个用户具有以下关系:
User 1-* Test
Run Code Online (Sandbox Code Playgroud)
每个测试都有以下关系:
Test 1-1 Course
Test 1-* TestEvent
Run Code Online (Sandbox Code Playgroud)
我有一个返回用户的服务,在我的应用程序的不同点,我想急切地获取各种关系.我正在抓住目前所有的关系:
var result = (from appUser in context.AppUsers.Include("Tests.Course")
.Include("Tests.TestEvents")
where appUser.Login.ToLower() == loginName.ToLower() &&
appUser.IsDeleted == false
select appUser).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我不想总是返回链接到Test或TestEvents的Course.如何构建ObjectQuery并根据需要动态添加Include语句,而不是使用一系列if else语句.
所以我有一个SQL查询跟随
SELECT P.Date, P.CategoryName, P.ProductName, SUM(Quantity) Quantity, SUM(Sales) TotalSales, IsLevelThree
FROM Products P LEFT JOIN LevelThreeTracking LTT
ON P.Date = LTT.Date AND P.CategoryName = P.CategoryName AND P.SecurityID = LTT.SecurityID
WHERE P.Date = '12-31-2007' AND P.CategoryName= 'CategoryName'
GROUP BY P.Date, P.CategoryName, P.ProductName, LTT.IsLevelThree
HAVING SUM(Quantity) <> 0
ORDER BY P.ProductName
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其转换为C#LINQ语法,并使用2个表进行DataContext设置.我已经尝试了几次(下面的最新版本)但是生成的sql看起来非常复杂并且超时.dtpBeginning是一个DateTimePicker.
var results = from p in dbFAS.Products
group p by new {p.Date, p.CategoryName, p.ProductName}
into gp
join ltt in dbFAS.LevelThreeTracking on
new {gp.Key.Date, gp.Key.CategoryName, gp.Key.ProductName} equals
new {ltt.Date, ltt.CategoryName, ltt.ProductName} …Run Code Online (Sandbox Code Playgroud)