Получите отдельные записи, используя linq to entity

Нет, вы можете назвать функцию по своему усмотрению.

Очевидно, что также важно правильно называть вашу функцию, и это одна из основных причин:

Функция получает имя, которое также используется для генерации URL для этой конкретной функции, и возвращает сообщение, которое мы хотим отобразить в браузере пользователя.

blockquote>

Вот пример того, почему использование соответствующего имени функции очень удобно (пример использования url_for):

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return 'index'

@app.route('/login')
def login():
    return 'login'

@app.route('/user/')
def profile(username):
    return '{}\'s profile'.format(username)

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))
    print(url_for('login', next='/'))
    print(url_for('profile', username='John Doe'))

Вы можете прочитать эту информацию, другие подробности в Документация Flask [111 ].

25
задан Boommer 22 August 2010 в 16:19
поделиться

3 ответа

Привет, вот как вы можете выбрать отдельные записи с помощью внутреннего соединения. Надеюсь, это поможет

var distinctrecords = 
(entity.Table.Join(entity.Table2, x => x.Column, y => y.Column, (x, y) => new {x, y})
             .Select(@t => new {@t.x.Column2, @t.y.Column3}))
             .GroupBy(t => t.Column2)
             .Select(g => g.FirstOrDefault());
1
ответ дан Eugene 28 November 2019 в 21:18
поделиться

Distinct () не работает должным образом, потому что он не отправляет предикат DISTINCT SQL в базу данных. Вместо этого используйте group :

var distinctResult = from c in result
             group c by c.Id into uniqueIds
             select uniqueIds.FirstOrDefault();

Группа LINQ фактически создает подгруппы сущностей, для которых используется указанное вами свойство:

Smith
  John
  Mary
  Ed
Jones
  Jerry
  Bob
  Sally

Синтаксис выше возвращает ключи, в результате чего получается отдельный список. Дополнительная информация здесь:

http://imar.spaanjaars.com/546/using-grouping-instead-of-distinct-in-entity-framework-to-optimize-performance

27
ответ дан 28 November 2019 в 21:18
поделиться

Чисто LINQ способ, который имеет место, - это группировка по имени, выбор отдельных групп по ключу, затем выборка на основе этого.

from i in user
group new {i.ID, i.Country, i.DateRecord} by i.Name into byNmGp
select byNmGp.First();

Edit: Entity Framework, конечно, очень популярный поставщик linq, но он не очень хорошо обрабатывает First(), хотя логически эквивалентный (в данном случае) FirstOrDefault() будет работать нормально. Я предпочитаю First(), когда ограничения EF не вынуждают использовать FirstOrDefault(), потому что его смысл лучше соответствует тому, что ищется здесь.

Другой способ - определить класс-помощник:

private class MyRecord : IEquatable<MyRecord>
{
  public int ID;
  public string Name;
  public string Country;
  public DateTime DateCreated;
  public bool Equals(MyRecord other)
  {
    return Name.Equals(other.Name);
  }
  public override bool Equals(object obj)
  {
    return obj is MyRecord && Equals((MyRecord)obj);
  }
  public override int GetHashCode()
  {
    return Name.GetHashCode();
  }
}
/*...*/
var items = (from i in user select new MyRecord {i.ID, i.Name, i.Country, i.DateRecord}).Distinct();

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

8
ответ дан 28 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: