我要在已经实现的代码中添加特定要求。 数据结构就是这样的:
public class Module
{
public string Type;
public string ID;
public List<Point> Points = new List<Point>();
}
public class Point
{
public string Type;
public string Location;
public string Connection;
}
最初LINQ用于返回具有某些特征的所有模块
List<Module> miList = Modules.Where(m => m.Type != null
&& m.ID == "A"
&& m.Points.Where(t => t.Connection == ""
&& SimilarPoint(t.Type, x).ToList())
.Count() > 0)
.ToList();
用x输入函数。新要求规定返回的模块都应具有Connection等于“”的点和位置字段中的相同值。
在我看来,SelectMany可以用于此目的,但我没有达到我的预期。
如何修改上述功能?
提前致谢
答案 0 :(得分:0)
不完全确定SimilarPoint(t.Type, x)
在这里做了什么。
也许你应该尝试这样的事情,看看它是否适合你 -
var resultSet = Modules.Where(m => !string.IsNullOrEmpty(m.Type) && m.ID.Equals("A"))
.Select(n =>
new Module {
Type=n.Type,
ID=n.ID,
Points= n.Points.Where(p => String.IsNullOrEmpty(p.Connection) && String.IsNullOrEmpty(p.Location)).ToList()
})
.ToList();
答案 1 :(得分:0)
你说所有返回的模块都有相同的Location
,但是这并没有解释你如何选择Location
所以我随意挑选了第一个匹配模块的位置:< / p>
var miQuery1 = Modules.Where(m => m.Type != null
&& m.ID == "A"
&& m.Points.Where(t => t.Connection == ""
&& SimilarPoint(t.Type, x).ToList()).Count() > 0)
.Where(m => m.Points.All(p => p.Connection == ""));
var miQuery2 = miQuery1.Where(m => m.Location == miQuery1.First().Location);
List<Module> miList = miQuery2.ToList();