Проверьте, содержит ли неявно типизированная переменная конкретное значение - PullRequest
0 голосов
/ 29 июля 2011

У меня есть неявная переменная, принимающая список, содержащий результат запроса SQL (LINQ). Этот набор представляет существующих клиентов из списка, выбранного ранее.
Через хранимую процедуру я беру новый набор клиентов, который будет использоваться для заполнения раскрывающегося списка. Повторяя этот набор данных, я исключаю эти записи, если они уже содержатся в списке существующих записей.

Как я могу сделать эту проверку с неявно типизированными переменными?

var existingClients = (from doc in TBL_Documents
                       join c in TBL_CONTACT on doc.CONTACTID equals c.CONTACTID
                       where doc.DOCID.Equals(DocID)
                       select new { c.CONTACTID, c.FULLNAME }).ToList();


 var resultSet = sp_ActiveContacts(index).ToList();
 foreach (var record in resultSet)
 {
   //How could I achieve something like this if condition (like a List)?
   if (!existingClients.Contains(record.CONTACTID))            
   {                                
      optionTags += "<option value=" + record.CONTACTID + ">" + record.Name + "</option>";
   }                       
 }

Если возможно, я бы предпочел избегать создания временного Списка для хранения КОНТАКТА, используемого для условия if.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Анонимные типы проверяют равенство, проверяя каждое свойство, поэтому вы можете сделать это:

if (!existingClients.Contains(new { record.CONTACTID, record.FULLNAME }))

(Предполагается, что ваша переменная record имеет свойство FULLNAME. В противном случае просто создайте анонимный объект с соответствующими значениями.)

См. этот ответ для получения дополнительной информации.

Редактировать

Еще проще:

if (!existingClients.Any(c => c.CONTACTID == result.CONTACTID))
0 голосов
/ 29 июля 2011

Спасибо Мэтту за хороший ответ! Что касается производительности, какая разница между вашим предложением и использованием временного Списка для хранения идентификаторов и проверки этого списка?

...
List<Guid> existIDs = new List<Guid>();
foreach (var c in existingContacts)
{
  existIDs.Add(c.CONTACTID);
}

var resultSet = db.sp_PagingActiveContacts(idx, userLogin, range).ToList();
foreach (var record in resultSet)
{
if (!existIDs.Contains(new {record.CONTACTID}))
{  ....
...