Довольно часто нам проще, если вы дадите нам свое требование вместо того, чтобы дать нам какой-то код и скажете, что код не работает.
Давайте предположим, что ваш неуклюжий метод - это то, что вам нужно.
Итак, MyTable - это последовательность объектов, давайте назовем их Values. Каждое значение имеет как минимум два свойства: ValueOne и ValueTwo. У вас также есть входное значение: valueOne.
Предположим, у вас были Школы и Студенты, у каждой Школы был первичный ключ в Id, а в штате
class School
{
public int Id {get; set;}
public int CityId {get; set;}
...
}
public class Student
{
public int Id {get; set;}
public string Name {get; set;}
public int CityId {get; set;}
}
Примечание, столь странный запрос: :
Дайте мне всех учеников, которые живут в том же городе, что и школа, 10
int schoolId = 10;
var studentsInSameCityAsSchool10 = dbContext.Schools
// keep only school with Id == 10
.Where(school => school.Id == 10)
// get all Students on these Schools
.GroupJoin(dbContext.Students,
school => school.CityId,
student => student.CityId,
(school, studentsWithSameCityId) => new
{
SchoolId = school.Id,
Students = studentsWithSameCityId.Select(student => new
{
StudentId = student.Id,
Name = student.Name,
...
})
.ToList(),
});
Очень просто, не правда ли. Теперь давайте сделаем запрос только в одной таблице:
Дайте мне все школы с тем же CityId, что и у школы [10]
int schoolId = 10;
var studentsInSameCityAsSchool10 = dbContext.Schools
// keep only school with Id == 10
.Where(school => school.Id == 10)
// get all Students on these Schools
.GroupJoin(dbContext.Students,
school => school.CityId,
student => student.CityId,
(school, studentsWithSameCityId) => new
{
SchoolId = school.Id,
Students = studentsWithSameCityId.Select(student => new
{
StudentId = student.Id,
Name = student.Name,
...
})
.ToList(),
});
Очень просто, не Это. Теперь давайте сделаем запрос только в одной таблице:
Дайте мне все школы с тем же CityId, что и School [10]
int schoolId = 10;
var studentsInSameCityAsSchool10 = dbContext.Schools
// keep only school with Id == 10
.Where(school => school.Id == 10)
// get all Students on these Schools
.Join(dbContext.Students, // Join Schools and Students
school => school.CityId, // from every School take the CityId
student => student.CityId, // from every Student take the CityId
(school, studentWithSameCityId) => new // from every School and every Student
{ // that has the same CityId, make one new
SchoolId = school.Id,
CityId = school.CityId,
StudentThatLiveInCityId = studentWithSameCityId,
});
Очень просто, не Это? Теперь давайте сделаем запрос только в одной таблице:
Дайте мне все школы с тем же CityId, что и у школы [10]
int schoolId = 10;
var studentsInSameCityAsSchool10 = dbContext.Schools
.Where(school => school.Id == 10)
// get all Schools in the same City as School[10]
.Join(dbContext.Schools, // Join Schools and Schools
school1 => school1.CityId, // from every School1 take the CityId
school2 => school2.CityId, // from every School2 take the CityId
(school1, school2WithSameCityId) => new // from every School and every School
{ // that has the same CityId, make one new
...
});
Но что это связано с моим вопросом
Теперь давайте изменим некоторые имена свойств:
class School
{
public int ValueOne {get; set;} // was Id
public int ValueTwo {get; set;} // was CityId
}
int valueOne = 10; // was schoolId
Дайте мне все школы с одинаковым значением ValueTwo (было: расположено в том же городе или имеет тот же cityId), что и школа с ValueOne == valueOne (был: как школа [10])
После упражнений со школами и учащимися это должно быть легко:
int valueOne = 10;
var valuesWithSameValueTwo = dbContext.Schools
.Where(value => value.ValueOne == 10)
// get all Values with same ValueTwo Value[10]
.Join(dbContext.Schools, // Join Schools and Schools
val1 => val1.ValueTwo, // from every val1 take the ValueTwo
val2 => val2.ValueTwo, // from every val2 take the ValueTwo
(val, valWithSameValueTwoId) => new
{
...
});
Что ж, ваш запрос проще: вам нужно только знать, есть ли такой элемент. Таким образом, вам не нужно выбирать какие-либо свойства, и вы можете остановиться, как только найдете их:
// Where and Join:
...
(val, valWithSameValueTwoId) => valWithSameTwoId)
.Any();