public class ReduceResult
{
public string Text { get; set; }
public string UserName { get; set; }
public string ProfileImageUrl { get; set; }
}
示例记录:
UserName Text
UsernameA Text1, Text2, Text3
UsernameB Text2, Text3, Text4
UsernameC Text1, Text2, Text3
我要求用户包含where子句中提到的所有文本。例如
如果where子句包含Text IN { Text1, Text2, Text3 }
,我应该获得用户'A'
和'C'
的记录,因为所有必需的文本都包含在他们的记录中。
我不应该获得用户'B'
记录,因为'Text1'
在他的记录中不存在。我需要使用LINQ
来实现它。你能指导我正确的方向吗?
答案 0 :(得分:0)
如果你可以修改ReduceResult类,那么你可以实现IEquatable并添加Equals方法并覆盖GetHashCode()。 像这样:
public class ReduceResult: IEquatable<ReduceResult>
{
public string Text { get; set; }
public string UserName { get; set; }
public string ProfileImageUrl { get; set; }
public bool Equals(ReduceResult other)
{
}
public override int GetHashCode()
{
}
}
然后,您可以比较任何其他主要类型(如int,string)来比较两个ReduceResult。 例如,ReduceResult1 == ReduceResult2
如果没有,那么你可以创建一个Comparer类:
class ReduceResultComparer : IEqualityComparer<ReduceResult>
{
public bool Equals(ReduceResult x, ReduceResult y)
{
}
public int GetHashCode(ReduceResult reduceresult)
{
}
}
并像这样使用它:
//This outside your linq query
var comparer = new ReduceResultComparer();
//This inside query
comparer.Equals(ReduceResult1, ReduceResult2)
答案 1 :(得分:0)
如果我理解你的问题是正确的,这只是一个像这样的常规where子句。
var data = from x in listOfObjects
where x.Text == "Text1, Text2, Text3"
select new ReduceResult
{
UserName = x.UserName,
ProfileImageUrl = x.ProfileImageUrl,
Text = x.Text,
};
答案 2 :(得分:0)
你应该这样做:
string[] texts = new string[]{"Text1", "Text2", "Text3"};
var records = from x in list
let a = from b in x.Text.Split(',') select b.Trim()
where a.Intersect(texts).Count() == texts.Count()
select x;