【发布时间】:2015-09-18 11:25:43
【问题描述】:
假设以下两个SQL表。
db.Fruits
ID Name
F1 Apple
F2 Orange
F3 Melon
db.Attributes
ID Fruits_ID AttributeType AttributeValue
A1 F1 Color Red
A2 F3 Size Large
A3 F2 Size Small
A4 F1 Size Small
A6 F3 Color Brown
如何使用 LINQ 查询在多个可为空的条件下搜索我想要的水果,而不因 JOIN 导致结果相乘?例如,如果condition 为空,则以下查询会产生多个结果。
var q = from f in db.Fruits
join a in db.Attributes
on f.ID equals a.Fruits_ID
where string.IsNullOrEmpty(condition) || fa.AttributeValue.Contains(conditon)
select FruitResult
{
// ...
}
无论如何,我也调查过INTO,但这对我不起作用。
var q = from f in db.Fruits
join a in db.Attributes
on f.ID equals a.Fruits_ID
into FruitsAttributes
from fa in FruitsAttributes
where string.IsNullOrEmpty(condition) || fa.AttributeValue.Contains(conditon)
select FruitResult
{
// ...
}
当condition 为空或为空时,上面仍然返回多个/连接的结果。
TL;DR:如何在查询中使用一对多 .Contains 签入,以便在条件为空时返回单个“未连接”行?
【问题讨论】:
-
我不太确定
condition应该是什么。我认为您应该合并 2 个查询,一个用于condition != null,一个不与condition == null连接的查询。例如var q1 = from f in db.Fruits join a in db.Attributes on f.ID equals a.Fruits_ID where !string.IsNullOrEmpty(condition) || fa.AttributeValue.Contains(conditon) select FruitResult { // ... }; var q2 = from f in db.Fruits where string.IsNullOrEmpty(condition) select FruitResult { // ... }; var q = q1.Union(q2);
标签: c# linq linq-to-sql