Привязка к объектам вариации содержит - PullRequest
0 голосов
/ 15 февраля 2011

Все ясно для

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };

IEnumerable<string> query = names
    .Where   (n => n.Contains ("a"))

Что на самом деле мне нужно

string[] providers = { "gmail", "yahoo", "hotmail" , "something" };

и определите с помощью LINQ (необязательно возвращающего IEnumerable, bool сделает), является ли определенный адрес электронной почты somebody@something.com из этого списка поставщиков, т.е. элемент поставщиков массива является нечувствительной к регистру подстрокой электронной почты адрес.

Ответы [ 4 ]

1 голос
/ 15 февраля 2011

Вы можете использовать это.

string[] providers = { "gmail", "yahoo", "hotmail", "something" };
string inputEmail1 = "test@gmail.com";
string inputEmail2 = "test@gmail2.com";
var query = from n in providers
            where inputEmail1.ToLower().Contains("@" + n + ".")
            select n;

Console.WriteLine(query.Count()); //For inputeEmail1,Print 1. For inputeEmail2, it will print 0
1 голос
/ 15 февраля 2011

Это позволит проверить, существует ли указанный в списке доменов адрес domain . Это обеспечит бул.

string email = "me@hello.com";

string[] domains = new string[]{"hello", "goodbye"};

bool exists = new List<string>(domains).Exists(x => email.Conatains(string.Format(@"@{0}\.", x);
1 голос
/ 15 февраля 2011

Будете ли вы иметь дело с отдельными электронными письмами или их коллекцией?

// individual
var email = ...;
var isValid = providers.Any(p => email.IndexOf(p, StringComparison.OrdinalIgnoreCase) != -1);

// collection
var emails = new[] { ... };
var validEmails = emails.Where(e => providers.Any(p => e.IndexOf(p, StringComparison.OrdinalIgnoreCase) != -1));
0 голосов
/ 15 февраля 2011

Я предполагаю, что вы хотите сделать регистр текста без учета регистра между '@' и первым '.'.

Итак, вот мой подход:

var providers = new []
    { "gmail", "yahoo", "hotmail", "something" };

var inputEmail = "test@gmail.com";

var match = inputEmail.Split('@')[1].Split('.')[0];
// You should probably expand this out to check for error in the input string.

Func<string, bool> isMatch =
    p => String.Compare(match, p, true) == 0;

var query =
    from p in providers
    where isMatch(p)
    select p;

var contains = query.Any();

Я пытаюсь убрать детализацию моего запроса в Func, чтобы сделать запрос вроде "очень простым".

...