İşte

2013-11-26 25 views
8
var Charts = chartGroup 
    .Descendants("charts") 
    .Elements("chart") 
    .Where(x => x.Attribute("id").Value == chartId.ToString()) 
    .Select(x => x.Attribute("name").Value).ToList(); 

kullanmak istediğim bir "in-fıkra" dizeleri dizisi için Attribute("id").Value için (SQL in fıkra gibi)":İşte

gibi:

Where(x => x.Attribute("id").Value in ("1","2") 
Where(x => x.Attribute("id").Value` in charIds[] 
Bunu başarmak için nasıl

?

+0

Nesnelere düz LINQ kullanarak değilseniz, sizin gibi (bazı 'IQueryable' sağlayıcılar onlara atmak tüm yapıları uygulamak gerekmez akılda tutmak zorunda' Contains'). Hemen hemen tüm ORM çerçevelerinin yeni sürümleri bunun üstesinden gelecektir, ancak daha eski sürümlerde bazı SQL'leri kendiniz kesmek zorunda kalacaksınız. Tabii ki, bu basit CLR nesneleri üzerinde çalışıyor gibi görünüyor. – Groo

cevap

18

, o zaman kullanabilirsiniz LINQ

var ids = new []{"id1","id2", ... }; 
var Charts = chartGroup.Descendants("charts") 
         .Elements("chart") 
       .Where(x => ids.Contains(x.Attribute("id").Value)) 
       .Select(x => x.Attribute("name").Value).ToList(); 
0

gibi bir şey ... nerede charIds.Contains (x.Attribute "id" .Value)

+0

Eminim bu kod –

+0

derlemiyor "LINQ içinde yan tümce" okudum. Bu lambda, benim kötü :) –

3

kullanabilirsiniz IEnumerable yöntemini içerir:

var ids = new[]{"1", "2"}; 
Where(x=>ids.Contains(x.Attribute("id").Value)); 

güncelleme:

dahası, bu kod IQueryable için SQL deyimi 'in' in transfer edecek.

.Where(x => charids.Contains(x.Attribute("id").Value) 
3

Böyle bir şey yapabiliriz: Bir dizide bir değerler kümesi varsa

1

INEnumerable.Contains veya Enumerable.Any olduğunu. İşte çeşitli yaklaşımlar şunlardır:

string[] strIDs = new[]{ "6", "7" }; 
int[] intIDs = new[]{ 1, 2 }; 
char[] charIds = new[]{ '4', '5' }; 

.... 
.Where(x => strIDs.Contains(x.Attribute("id")) 
    || intIDs.Any(i => i.ToString() == x.Attribute("id")) 
    || charIds.Any(c => c.ToString() == x.Attribute("id"))); 
-1
var memberData = (from u in _objGroupRepositoty.Value.GetUsers() 
             join umedia in _objGroupRepositoty.Value.GetMediaDetails() on u.userid equals umedia.userid 
             join gm in _objGroupRepositoty.Value.GetGroupMaster() on groupId equals gm.GDID 
             join m in _objGroupRepositoty.Value.GetGroupMembers() on u.userid equals m.userid 
             join media in _objGroupRepositoty.Value.GetMediaDetails() on gm.GDID equals media.GDID 

             where (m.GDID == groupId 
             && m.IsActive == true 
             && gm.IsActive == true 
             && u.IsActive == true) 

             select new 
             { 
              userid = u.userid, 
              firstname = u.firstname, 
              lastname = u.lastname, 
              mobile_no = u.mobile_no, 
              imagepath = umedia.media_path, 
              IsAdmin = m.IsAdmin, 
              GroupID = gm.GroupID, 
              group_name = gm.group_name, 
              tagline = gm.tagline, 
              groupImage = media.media_path, 
              ChatRoomId = gm.ChatRoomId, 
              OperationType 

              //newMember = newMemberLists.Contains(u.userid) than "Y" : "N", 
             }).ToList().Distinct(); 
+3

dedi yardımcı olacak bazı açıklama ve cevabınızı ayrıntıları ekleyerek lütfen deneyin –