我有一个LINQ问题.我对linq并不满意.我有两节课:
[Person]
string FirstName {get;set;}
string LastName {get;set;}
IEnumerable<State> LastName {get;set;}
[State]
int StateID {get;set;}
string StateName {get;set;}
Run Code Online (Sandbox Code Playgroud)
我想编写一个LINQ查询,它将返回所有"Person"类的不同状态列表.sql中的一个例子是
SELECT DISTINCT s.StateID
FROM Person p
JOIN States s ON (p.StateID = s.StateID)
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将不胜感激.
尝试这个:
var stateList = (from s in context.States
join p in context.Persons on s.StateId equals p.StateId
select s).Distinct();
Run Code Online (Sandbox Code Playgroud)
Linq distinct很烦人,你必须在你想要Distinct()的类上实现IEqualityComparer接口,那么你得到你所指的不同选择的方式是:
IEnumerable<Person> people = GetPeople();
people.SelectMany((person) => person.LastName).Distinct();
Run Code Online (Sandbox Code Playgroud)
SelectMany()将结果与可枚举结合起来,这样你就不会得到IEnumerable <IEnumerable <State >>但得到IEnumerable <State>
实现IEqualityComparer时,知道Distinct()确实验证了Equals()的结果是等效的,GetHashCode()的结果是等效的.我认为在你的情况下你想在State类上实现comparer.
可能看起来像这样:
public class State : IEqualityComparer<State>
{
int StateID {get;set;}
string StateName {get;set;}
public bool Equals(State x, State y) { return x.StateID == y.StateID && x.StateName == y.StateName; }
public int GetHashCode(State obj) { return obj.StateId; }
}
Run Code Online (Sandbox Code Playgroud)
请记住,如果不实现IEqualityComparer,则您的distinct()将不会为您执行任何操作.
归档时间: |
|
查看次数: |
26886 次 |
最近记录: |